Publishing a page and having it rank are two different events, and between them sits a step most people never think about: Google has to decide the page is worth storing. Plenty of perfectly good pages never clear that bar.
This guide walks through the nine reasons a URL fails to get indexed, in the order you should check them.
First, find out what Google actually thinks
Before guessing, get the real status. Open Google Search Console, paste the URL into the inspection tool at the top, and read the coverage verdict. You will get one of a handful of answers, and each points somewhere different.
- Discovered – currently not indexed. Google knows the URL exists but has not crawled it. This is a scheduling problem.
- Crawled – currently not indexed. Google fetched the page and chose not to store it. This is a quality or duplication problem.
- Excluded by ‘noindex’ tag. You told it not to index. Usually accidental.
- Alternate page with proper canonical tag. Google folded this URL into another one.
- Page with redirect or Not found (404). The URL is not serving a real page.
A quick sanity check for a whole site: search site:yourdomain.com. The result count is approximate, but if it is wildly below your page count, you have a systemic problem rather than a one-page problem.
1. The page is genuinely new and nothing points to it
Google finds URLs by following links and reading sitemaps. A page with no internal links pointing at it, absent from your sitemap, and with no external references is effectively invisible. It may eventually surface, but "eventually" can mean months.
Fix: link to it from a page that already gets crawled — a category page, your blog index, a relevant older article. Internal links are the single most reliable discovery signal you control.
2. A stray noindex is still in place
This is the most common self-inflicted wound. A staging flag survives the launch, or a plugin adds noindex to an entire post type.
Check both places it can hide — the HTML head:
<meta name="robots" content="noindex, nofollow">
And the HTTP response header, which is easy to miss because it never appears in the page source:
X-Robots-Tag: noindex
Fix: remove it, then request indexing in Search Console so Google re-checks rather than waiting for its own schedule.
3. robots.txt is blocking the crawl
A Disallow rule stops Google fetching the page at all. Note the subtle trap: a blocked page can still appear in results as a bare URL with no description, because Google saw links to it but was never allowed to read it. Worse, if a page is blocked in robots.txt, Google cannot see your noindex tag either.
Fix: test the URL in Search Console’s robots.txt tester. If you want a page out of the index, allow the crawl and use noindex — never robots.txt.
4. The canonical tag points somewhere else
A canonical tag tells Google which URL is the real one. If page B canonicalises to page A, page B will not be indexed separately — that is the tag working correctly. The problem is when it is wrong: templates that hard-code a single canonical across every page, or paginated archives all pointing at page one.
Fix: every indexable page should have a self-referencing canonical pointing at its own absolute URL.
5. Google considers the content duplicate or near-duplicate
Product pages that differ only by size, location pages built from one template with the city name swapped, syndicated articles — Google picks one representative and drops the rest.
Fix: add something only that page can offer. For location pages that means genuinely local detail; for product variants it usually means consolidating to one URL with selectable options.
6. The page is thin
There is no magic word count, but a page has to justify its slot in the index. A 90-word post, an empty tag archive, or a stub with a heading and a sentence rarely does.
Fix: either expand the page into something that answers a real question, or accept it is not index-worthy and noindex it so it stops diluting your crawl budget.
7. Crawl budget is being spent elsewhere
Google allocates a finite amount of crawling to each site. On a large site, faceted navigation, session IDs, endless filter combinations and calendar archives can generate hundreds of thousands of low-value URLs that soak up the entire budget before your real pages are reached.
Fix: block parameter-generated URLs in robots.txt, noindex thin archives, fix redirect chains, and make sure your sitemap contains only URLs you actually want indexed. A clean sitemap is a strong hint about priority.
8. The site is slow or unstable
If Googlebot hits timeouts or 5xx errors, it backs off and crawls less. A page that returns a server error when the bot arrives simply will not be indexed.
Fix: check the Crawl Stats report in Search Console for response-time spikes and error rates. Fix the server before blaming the content.
9. The page depends on JavaScript to render
Google can execute JavaScript, but rendering happens in a second pass that can lag the initial crawl considerably. If your main content only exists after a client-side fetch, indexing gets slower and less reliable.
Fix: server-render the content that matters, or pre-render for crawlers. Use the "View crawled page" HTML in Search Console’s URL inspection to see what Google actually received.
Speeding up the part you control
Once the blockers are gone, indexing is a discovery race. Submitting a URL through Search Console works but is manual and rate-limited, which does not scale past a handful of pages.
That is the gap indx.it.com fills: paste your URLs and they are pushed through priority discovery channels, typically triggering a crawl in under two minutes rather than days. It cannot make a noindex page index or turn thin content into something Google wants — fix those first — but for pages that deserve to be indexed and are simply waiting, it removes the wait.
A checklist to run before you escalate
- Inspect the URL in Search Console and note the exact verdict.
- View source, search for
noindex. - Check response headers for
X-Robots-Tag. - Test the path against robots.txt.
- Confirm the canonical points at itself.
- Confirm at least one internal link points to the page.
- Confirm it is in your XML sitemap.
- Confirm it returns HTTP 200, not a redirect or an error.
- Read the rendered HTML Google received, not the source you wrote.
Nine checks, ten minutes. In our experience the answer is in the first four more often than not.