Indexing and technical SEO guide
Diagnose a WordPress Page That Search Console Says Is Not Indexed
Start with one URL: inspect it, check the public response yourself, then route the status Google reports to the repair that owns it.
On this page
Pick one affected URL, inspect it in Search Console, and then check its public response yourself: the status code, any robots rules, and the canonical it declares. The reason Google gives in the Page Indexing report tells you which question to answer next, and the repair depends on the reason. Do not change settings until you know which one applies, and do not expect every URL on a WordPress site to be indexed.
Google’s Page Indexing report help, checked September 27, 2026, says not to expect every URL on your site to be indexed, and that the goal is to get the canonical version of every important page indexed. It also says a site with fewer than 500 pages probably does not need the report. For a small site, inspecting the few pages you care about is often faster.
Read the report before you change anything
Open Pages under Indexing in Search Console. The “Why pages aren’t indexed” table lists each reason with a Source column. Google’s help page says the Source value shows whether the issue comes from Google or from the website, and that in general you can fix only issues whose source is listed as “Website” (checked September 27, 2026).
Three limits of the report matter for diagnosis:
- It cannot be searched by URL. To check one page, use the URL Inspection tool.
- Example lists are samples. The indexed pages list shows at most 1,000 URLs and is not guaranteed to include every indexed page.
- A reason can describe an old crawl. The report reflects Google’s last crawl of the URL, not what your server returns now.
Inspect one URL, both versions
Paste the URL into the inspection bar at the top of Search Console. The first result is the indexed version. Google’s URL Inspection help, checked September 27, 2026, says it “is not a live test” and shows the most recently indexed version of the page. Note these fields:
| Field | What it answers |
|---|---|
| Crawl allowed? | Whether robots.txt let Google fetch the URL |
| Page fetch | Whether the fetch succeeded, or why it failed |
| Indexing allowed? | Whether Google found a noindex rule |
| User-declared canonical | The canonical your page stated |
| Google-selected canonical | The URL Google chose to represent the content |
| Last crawl | When Google last fetched it |
| Referring page and Sitemaps | How Google may have found it |
Then click Test live URL. The live test fetches the page now. View tested page shows the raw HTML, the HTTP headers, JavaScript console output, page resources, and a screenshot of the rendered page. Google’s help page is explicit that a passing live test “is not a guarantee” of appearing in results. It means the URL can be crawled and parsed, not that it will be indexed.
If the indexed version shows a problem and the live test does not, the fix may already be in place and Google has not recrawled yet. The live test does not check everything: the Page Indexing help says duplicate and canonical conditions are not tested in it, so a clean live test does not clear those. If both show the same problem, keep going.
Check the public response yourself
Search Console reports what Google saw. Your own check shows what your server sends right now, to someone who is not logged in. That second part matters on WordPress: caching plugins can serve logged-in users a different copy. The WP Super Cache plugin page, checked September 27, 2026, says its static files go to users who are not logged in, so the page you see in your browser can differ from the copy served to crawlers.
-
Check the status code and headers:
curl -sI https://example.com/some-page/Look at the first line (
HTTP/2 200,301,404,500) and for anyx-robots-tagorlocationheader. -
Check the robots meta tag and canonical in the HTML:
curl -s https://example.com/some-page/ | grep -ioE '<meta[^>]*robots[^>]*>|<link[^>]*canonical[^>]*>' -
Check robots.txt for the same host:
curl -s https://example.com/robots.txt -
Open the page in a private window and use your browser’s view source to confirm what a visitor gets.
Write down the date, the URL, and each result. That record lets you compare before and after a change, and it separates what you observed from what you suspect.
Answer three questions in order
Most reasons fall into one of three questions. Answer them in order and stop at the first one that fails, because a later answer means nothing until the earlier one passes.
- Can Google fetch the page? The response must be a 200 and robots.txt must allow the crawl. Google’s technical requirements, checked September 27, 2026, list three minimums: Googlebot is not blocked, the page returns HTTP 200, and the page has indexable content.
- Is Google allowed to index it? No
noindexin the HTML or the headers. - Which URL did Google pick? If the page is one of several similar URLs, Google chooses one to index. Your canonical is a preference Google weighs, not an instruction: Google’s canonicalization guide, checked September 27, 2026, calls it “a hint, not a rule.”
If all three pass and the page is still not indexed, you are usually looking at Google’s own decision, reported as “Crawled, currently not indexed” or “Discovered, currently not indexed.” Google’s technical requirements page says meeting the requirements does not guarantee indexing.
Route the status to the guide that owns the repair
The reason names below are written as Google’s help page prints them, with the hyphen after “Crawled” and “Discovered” replaced by a comma. “Indexed, though blocked by robots.txt” and “Page indexed without content” are warnings on pages that are indexed; the report lists them in its Improve page experience table, not under “Why pages aren’t indexed.” The WordPress column lists causes worth checking first, not a definitive diagnosis.
| Reason in the report | Where to look first on WordPress | Guide |
|---|---|---|
| Server error (5xx) | PHP fatal error, host resource limits, overloaded database | Googlebot access errors |
| Blocked due to unauthorized request (401) | HTTP password on a site that has launched | Googlebot access errors |
| Blocked due to access forbidden (403) | Security plugin, host firewall, CDN rule | Googlebot access errors |
| URL blocked due to other 4xx issue | An unusual 4xx status from a plugin, host, or firewall | Googlebot access errors |
| Redirect error | HTTPS or www rules fighting, a loop between plugins | Redirect chains and loops |
| Page with redirect | Usually expected: an old URL that now redirects | Redirect chains and loops |
| URL blocked by robots.txt | A physical robots.txt file, a leftover Disallow |
Fix a robots.txt block |
| Indexed, though blocked by robots.txt | A URL blocked from crawling but linked from elsewhere | Fix a robots.txt block |
| URL marked ‘noindex’ | Settings > Reading, a per-post setting, a header | Find an accidental noindex |
| Not found (404) | A deleted or renamed page, a mistyped link | 404, 410, or redirect |
| Soft 404 | Empty archives, “nothing found” templates, failed rendering | Fix soft 404 pages |
| Alternate page with proper canonical tag | Working as intended | Canonical selection |
| Duplicate without user-selected canonical | Parameter URLs, attachment pages, archive copies | Canonical selection |
| Duplicate, Google chose different canonical than user | Staging leakage, http and https mixes, near-identical pages | Canonical selection |
| Crawled, currently not indexed | Old crawl, a duplicate, missing rendered content, low standalone value | Crawled, currently not indexed |
| Discovered, currently not indexed | Many low-value URL patterns, slow or erroring server, weak linking | Discovered, currently not indexed |
| Page indexed without content | Content Google could not read, such as a page cloaked to Google or a format it cannot index | Inspect the page and the rendered HTML first |
Google’s help page describes “Alternate page with proper canonical tag” as a page that “correctly points to the canonical page, which is indexed.” Many rows in the report are like that: evidence that WordPress and your SEO settings are doing their job. Old redirected addresses, intentionally noindexed archives, and deleted pages belong there.
Confirm the fix, then record it
After you change something, repeat your own checks first. Then run the live test in URL Inspection again. If the page matters, use Request indexing; the URL Inspection help page says there is a daily limit and that a request “does not guarantee” the page will appear in the index.
For a reason that affects many URLs, click Validate fix on the reason’s details page. Google’s Page Indexing help says validation “typically takes up to about two weeks, but in some cases can take much longer” (checked September 27, 2026). Record the date you started it.
If WP Visibility is installed, wp visibility audit fails the blog_public check when Settings > Reading discourages search engines, and wp visibility post-audit <id> reports whether the post’s own setting is noindex (a site-wide rule for its post type is not checked there) and whether its canonical override points to another host. Treat those as supporting checks beside the public response, not as a substitute for it. Run the Site Audit lists every check.
Before you close the investigation, confirm:
- You inspected the exact URL in the report, including protocol,
www, and trailing slash. - Your notes separate what Google reported, what your server returned, and what you changed.
- The reason’s owner guide was followed only after its cause was confirmed.
- You recorded when you requested indexing or validation, without assuming a date by which the page will appear.
