"Excluded by 'noindex' tag" means Googlebot fetched the page, found a noindex directive and did as it was told. If the page is supposed to be private or has no search value, you are done. If the page should be in Google, find where the directive comes from (HTML meta tag, HTTP header, CMS setting or JavaScript), remove it, confirm with a live test and request indexing.
Unlike most statuses in the Page indexing report, this one involves no guesswork about Google's opinion. Your server said "do not index this". The work is finding out which part of your stack said it.
Decide first: intentional or not?
Open Indexing > Pages, click the status and look through the examples.
| Usually intentional | Usually a mistake |
|---|---|
| Cart, checkout, account, login | Product, category and service pages |
| Thank you and confirmation pages | Blog posts and guides |
| Internal search results | The homepage |
| Tag, author and date archives (by choice) | Landing pages built for organic search |
| Filter and sort URLs | Translated versions of indexed pages |
| Staging, preview and test pages | Anything listed in your XML sitemap |
| Paid campaign landing pages |
Shortcut: switch the report filter to All submitted pages. A noindexed URL in your sitemap is a contradiction. Either it should not be in the sitemap or it should not be noindexed. (In older versions of Search Console this case had its own error name, "Submitted URL marked 'noindex'".)
The two forms of noindex
In the HTML:
<meta name="robots" content="noindex">
<meta name="robots" content="noindex, follow">
<meta name="googlebot" content="noindex">
In the HTTP response:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
X-Robots-Tag: noindex
Notes that save time:
content="none"is equivalent tonoindex, nofollow.- A tag aimed at
googlebotonly affects Google. A tag aimed atrobotsaffects everyone. - If several directives conflict (one source says
index, anothernoindex), Google applies the most restrictive one. Adding anindextag does not cancel anoindexelsewhere. - The header form works for PDFs, images and other non-HTML files, and it is invisible when you view source. It is the most overlooked cause by far.
Find the source
Work through these in order. The indexability checker covers the first two in a single run.
1. The raw HTML
View source (not the element inspector) and search for noindex. Look at every <meta name="robots">, <meta name="googlebot"> and any other bot-specific meta tag.
2. The response headers
curl -sI https://www.example.com/page | grep -i x-robots-tag
or use the HTTP headers checker. If the header is there, it is set in the web server, the application, the CDN or an edge worker. Look for something like:
# Apache
Header set X-Robots-Tag "noindex, nofollow"
# Nginx
add_header X-Robots-Tag "noindex";
Some hosting platforms add this header automatically on preview and non-production domains, which becomes a problem when a preview domain is promoted or proxied to production.
3. The rendered HTML
- Inspect the URL in Search Console and click Test live URL.
- Click View tested page > HTML and search for
noindex.
If it appears here but not in the raw source, JavaScript adds it: a front-end framework's head manager with a default value, an A/B testing script, or a tag injected through a tag manager. Also check the reverse case. Google says that when it finds noindex in the initial HTML it may skip rendering, so JavaScript that is meant to remove a noindex cannot be relied on. Ship the correct tag in the server response.
4. What Googlebot gets versus what you get
If everything looks clean from your machine, the response may vary by user agent, IP address or cookie. The live test is the arbiter, since it is a real Googlebot fetch. Under Page indexing it shows "Indexing allowed? No: 'noindex' detected in 'robots' meta tag" or "...in 'X-Robots-Tag' http header", which tells you which form to hunt for.
5. Timing
Look at Last crawl in the inspection result. If the crawl predates the removal of the noindex, nothing is wrong. Google has simply not been back yet.
Where noindex comes from in common platforms
| Platform | Where to look |
|---|---|
| WordPress core | Settings > Reading > "Discourage search engines from indexing this site" (must be unticked) |
| Yoast SEO | Per page: Advanced > "Allow search engines to show this content in search results?". Site wide: Settings > Content types, Categories & tags, Advanced > Author and Date archives |
| Rank Math | Per page: Advanced tab > Robots Meta. Site wide: Titles & Meta |
| Shopify | Theme code in theme.liquid, the seo.hidden metafield, and SEO apps. Shopify noindexes some page types such as internal search by default |
| Wix, Squarespace, Webflow | Per page SEO settings ("Let search engines index this page" or similar) plus a site-wide visibility switch |
| Next.js, Nuxt and similar | robots metadata in a layout, environment-based conditions that misfire in production |
| CDN and edge | Header transform rules, workers, preview domain defaults |
More platform detail is in WordPress indexing problems.
The most common story behind a site-wide case: the site was built on a staging server with indexing disabled, and the setting came along at launch. If the whole site shows this status right after a launch or redesign, check the global switch first.
Fix and recover
- Remove the directive at its source. Do not counter it with another tag.
- Purge caches: page cache, CDN cache and any server-side full page cache. A cached copy with the old tag is a classic reason for a "fix" that does not take.
- Run Test live URL. You want "Indexing allowed? Yes".
- Click Request indexing for the important pages.
- For many URLs, open the issue in Indexing > Pages and click Validate fix. Google says validation typically takes up to about two weeks and can take much longer.
- Make sure the pages are in the sitemap with a current
<lastmod>, and linked internally.
About timing: Google crawls long-term noindexed pages less and less often. A page that was noindexed for a year will not be revisited tomorrow without a nudge, which is why the manual request matters here. After the recrawl, the page goes through normal evaluation. Removing noindex makes it eligible. It does not guarantee a place in the index.
If the noindex is intentional, use it correctly
- Keep the page crawlable.
noindexplus a robots.txtDisallowfor the same URL defeats itself, because Google cannot see a directive on a page it may not fetch. This is how you get "Indexed, though blocked by robots.txt". The distinctions are laid out in noindex vs robots.txt vs canonical. - Remove noindexed URLs from the sitemap.
- Do not write
Noindex:lines in robots.txt. Google does not support that rule and said so explicitly in 2019. - Do not use
noindexto handle duplicates. Use a canonical tag, which consolidates signals.noindexjust removes the page. - Do not pair
noindexwith a canonical pointing to another URL. The signals conflict. - Do not rely on links from noindexed pages. Google has said that pages left noindexed for a long time end up being treated much like
noindex, nofollow, so they are a poor way to get other pages discovered. - For truly private content, use authentication.
noindexkeeps a page out of search results. It does not stop anyone from visiting it.
Stop it from happening again
A stray noindex is cheap to prevent and expensive to discover late, because pages drop out silently.
- Add a post-deploy check that fetches your top ten URLs and fails if the HTML or headers contain
noindex. - Make the production environment, not a manually flipped setting, decide whether the tag is rendered.
- Block staging with HTTP authentication, so production never needs to inherit an "indexing off" flag.
- Watch Indexing > Pages after each release. A sudden rise in this status within days of a deployment points straight at the release.
TurboIndex can catch this early as well: it inspects your sitemap URLs through the URL Inspection API and flags any URL whose status changes to "Excluded by 'noindex' tag", which for a URL in a sitemap is nearly always unintended.
If pages have already fallen out of the index because of a stray tag, see why pages get deindexed for the recovery steps and the other causes worth ruling out.
Frequently asked questions
- What does Excluded by noindex tag mean?
- When Google crawled the page it found a noindex directive, either in a robots meta tag or in an X-Robots-Tag HTTP header, and therefore left the page out of the index. It is an instruction from your site, not a judgement by Google.
- I cannot find a noindex tag in my source code. Where is it?
- Check the HTTP response headers for X-Robots-Tag, which does not appear in the page source. Then check the rendered HTML, because JavaScript or a tag manager can inject the tag. Finally compare the last crawl date with your change history, since Google may be reporting an older version of the page.
- How long after removing noindex will the page be indexed?
- Google has to recrawl the page first. With Request indexing that often happens within days. Without it, pages that have been noindexed for a long time are crawled less frequently, so it can take weeks. Recrawling does not guarantee indexing.
- Should noindex pages be blocked in robots.txt as well?
- No. If robots.txt blocks the URL, Google cannot fetch the page and never sees the noindex directive, so the URL can stay indexed or get indexed from links alone. For noindex to work the page must be crawlable.
- Is it a problem to have many noindexed pages?
- Not if they are intentional, such as cart, account, thank you and internal search pages. Review the list for pages that should be in search, and keep noindexed URLs out of your XML sitemap.