Short answer: the noindex Google saw is almost never missing, it is just not where you looked. It is usually an X-Robots-Tag HTTP header added by the server, a CDN or a plugin, a WordPress or SEO plugin setting, a staging setting that was copied live, or an old crawl that Google has not refreshed yet. View source will not show you a header, so check the response headers first, then the settings, then ask Google to recrawl.
Why can't I see the noindex in the page source?
Google accepts noindex in two forms: a <meta name="robots"> tag in the HTML, or an X-Robots-Tag HTTP response header. Google's documentation treats them as equivalent. A header never appears in view source, so a page can look clean and still be blocked. Search Console's "Excluded by 'noindex' tag" status means Googlebot found one of the two on its last crawl.
How do I check for a hidden X-Robots-Tag header?
Run this from a terminal, using the exact URL Search Console flagged:
curl -sI https://example.com/some-page | grep -i x-robots-tag
If the site is blocked by a header, you will see a line like this:
x-robots-tag: noindex, nofollow
No output means no header was sent to your request. Some security plugins and CDN rules answer differently to Googlebot than to a normal browser, so also run the URL through Search Console's URL Inspection tool and open the live test. It shows the response Google actually got. If you would rather not use a terminal, the free noindex checker reads the meta tag and the header in one pass.
Where does the noindex usually come from?
| Source | Where to look | How to fix |
|---|---|---|
| WordPress reading setting | Settings, Reading, "Discourage search engines from indexing this site" | Untick it and save |
| SEO plugin, per page | The plugin's box under the editor, advanced or robots section | Set the page to index |
| SEO plugin, per post type or taxonomy | Plugin search appearance settings | Turn off "noindex" for that type |
| Server or CDN header | Apache or Nginx config, Cloudflare Transform Rules | Remove the header rule |
| Staging setting carried over | Host staging tools, .htaccess, a migration plugin | Remove it from the live site |
| Stale Google data | URL Inspection, last crawl date | Fix first, then request indexing |
What do I check on a WordPress client site?
- Open Settings, Reading. If "Discourage search engines from indexing this site" is ticked, untick it. WordPress's own documentation says it is a request, but it adds a robots meta tag, and Google honours it.
- Open the flagged page in the editor and check the SEO plugin's robots or advanced section. Then check the plugin's global settings for the page's post type, since one switch there can noindex every page of that type.
- Look for a header rule in
.htaccessor the Nginx config, such asHeader set X-Robots-Tag "noindex". Staging copies often leave this behind. - Check the CDN. In Cloudflare, look at Rules, Transform Rules, Modify Response Header for a rule that sets
X-Robots-Tag. - Clear the page cache and the CDN cache, then run the curl command again.
I removed it. Why does Search Console still say excluded?
Search Console reports what Google saw on its last crawl, not what your site serves now. After the fix, open URL Inspection, run the live test to confirm the page is indexable, then click Request Indexing. Google's recrawl guidance explains how to ask for a recrawl, and validating a fix can take days or longer for a large site. A page cannot be indexed while it still shows noindex, so confirm the live test passes before you start the validation.
What do I tell the client?
Keep it short and specific. For example: "Your site had a hidden setting telling Google not to list these pages. It has been removed and we have asked Google to recheck. Pages usually return within days to a few weeks, and we are watching it daily." Name the cause (a setting, a plugin or a header) so they know it was a configuration slip, not an attack, and tell them if traffic dropped while the pages were out of the index. Do not promise a recovery date. Google decides that.
How does quietwatch catch this?
quietwatch checks your client sites every day for noindex tags, X-Robots-Tag headers, robots.txt blocks and the other silent causes of deindexing, and emails you when something changes. See what quietwatch checks every day. The free tool above is the place to start: paste one URL and see what Google would see.