Updated
The No answers the question on the line before it: Indexing allowed? Google's help page defines that line as "Whether or not your page explicitly disallowed indexing." So No: 'noindex' detected in 'robots meta tag' means Google found a noindex in the page's HTML, and No: 'noindex' detected in 'X-Robots-Tag' http header means it found one in the HTTP response headers. Either way, the page stays out of Google until the noindex is gone and Google has crawled the page again.
The message tells you which layer to look in. Check both layers on the live URL first:
Reads the robots and googlebot meta tags and every X-Robots-Tag header on the URL, and says which one blocks indexing. Free, no signup.
Step 1: old crawl or live problem
URL Inspection opens on the Google Index view: what Google saw on its last crawl, with the date under Crawl. If you removed the noindex after that date, the message is history. Google's help says: "If you've changed the page since the crawl time listed, you can test your current version of the page by clicking Test live URL."
- Live test says Indexing allowed? Yes: the fix is already live. Click Request indexing and wait for the recrawl.
- Live test still says No: the noindex is still being served to Googlebot. Find the layer (steps 2 and 3).
Also check whether the noindex is meant to be there. Staging sites, cart, checkout and account pages, internal search results and thank-you pages are often noindexed on purpose. Leave those alone. For a whole list of noindexed URLs in the Page indexing report, see Excluded by 'noindex' tag (or the Shopify version).
Step 2: 'noindex' detected in 'robots meta tag'
The noindex is in the HTML, in a <meta> tag in the <head>. View the page source (not the editor) and search for noindex. It doesn't always look the way you expect:
googlebotinstead ofrobots: Google's robots meta tag docs: "Google supports two user agent tokens in the robotsmetatag; other values are ignored". The two aregooglebotandgooglebot-news. A search forname="robots"misses this tag.- Case doesn't matter.
NOINDEXcounts. noneis "Equivalent tonoindex, nofollow."unavailable_afterwith a date in the past: "Do not show this page in search results after the specified date/time."- Two tags that disagree: "In the case of conflicting robots rules, the more restrictive rule applies." An SEO plugin's
indextag doesn't cancel a theme'snoindextag.
Where the tag usually comes from:
| Source | What to check |
|---|---|
| CMS site-wide setting | WordPress Settings, Reading, Discourage search engines from indexing this site noindexes every page. See our guide to that setting. Wix has a site-wide switch too, in its SEO Settings. |
| SEO plugin, per page or per type | Yoast, Rank Math and AIOSEO each have a per-post robots setting and a default per post type, taxonomy or archive. The noindex checker page lists where each one keeps it. |
| Theme or template | A hard-coded tag in header.php or a layout file, often left over from a staging copy. |
| JavaScript | A tag manager or front-end framework that adds or changes the meta tag after load. The source shows one value, the rendered page another. See step 4. |
Step 3: 'noindex' detected in 'X-Robots-Tag' http header
The page source is clean, and the noindex comes with the response headers. Your CMS can't show it to you. Look at the headers sent as Googlebot:
Or use the X-Robots-Tag checker, which also shows the header on each redirect hop; its page has the Apache, nginx, Vercel and Cloudflare details. The usual sources:
| Source | What to look for |
|---|---|
| Web server config | Header set X-Robots-Tag in .htaccess or the Apache config; add_header X-Robots-Tag in an nginx server or location block. Often copied from a staging server, or meant for PDFs and applied to everything. |
| Cloudflare in front of the site | A Response Header Transform Rule can set X-Robots-Tag on every response, even when the origin sends none. Look in Rules, Transform Rules. |
| Vercel | Vercel adds X-Robots-Tag: noindex to preview deployments, and to the old production deployment once a new one is promoted. If your live domain shows it, check that the domain points at the current production deployment. |
| App or middleware | Framework middleware that sets the header when an environment variable says "not production", and that variable is wrong on the live server. |
A header can also name a crawler: X-Robots-Tag: googlebot: noindex applies to Google only, while a header without a name applies to all crawlers. Google: "The HTTP header, the user agent name, and the specified values are not case sensitive."
If the header only shows up for Googlebot's user agent, a firewall or bot rule is adding it. Some only act on Google's real IP addresses, which curl from your machine can't copy. In that case URL Inspection's live test is the only reliable view.
Step 4: the JavaScript trap
If the original HTML has noindex and JavaScript removes it or changes it to index, Google may never run that script. Google's JavaScript SEO basics: "When Google encounters the noindex tag, it may skip rendering and JavaScript execution," so changing or removing the tag with JavaScript may not work. Put the value you want in the HTML the server sends.
The reverse also happens: a script adds noindex after load. The source looks clean, and only the rendered HTML in URL Inspection (View crawled page or View tested page) shows the tag.
Step 5: after the fix
- Clear every cache in front of the page: caching plugin, host, CDN. Google reads what an anonymous visitor gets.
- Run Test live URL in URL Inspection until Indexing allowed? says Yes.
- Click Request indexing. Google's help: "Indexing typically takes only a day or so, but can take much longer in some cases."
- Many URLs with the same cause: fix the template, then click Validate fix on the Excluded by 'noindex' tag row in the Page indexing report.
Don't block the URL in robots.txt to hurry things up. Google has to fetch the page to see the noindex is gone: "For the noindex rule to be effective, the page or resource must not be blocked by a robots.txt file". URL Inspection hides it too: Google's help says that for a page blocked by robots.txt, Indexing allowed? always shows Yes, because Google can't see the noindex.
What our checkers can't see: they read the HTML the server sends and don't run JavaScript, and they fetch as NoindexWatchBot, not from Google's addresses. A clean result from us plus a No in the live test points to JavaScript or a rule that only answers Googlebot.
Hear about the next noindex the day it appears
A plugin update, a deploy from the wrong branch or a copied server config can add noindex to pages that were fine yesterday. NoindexWatch checks the URLs you choose for a noindex in the meta tag or the X-Robots-Tag header, plus robots.txt, canonical and redirect changes, and tells you by email, Slack or Discord when one changes. The free plan covers 1 site with up to 20 URLs, checked once a day, no card; paid plans check every hour.
Sources: Google Search Console Help, URL Inspection tool; Google Search Central documentation on blocking indexing with noindex, robots meta tag and X-Robots-Tag specifications, and JavaScript SEO basics. Related: Excluded by 'noindex' tag · WordPress 'Discourage search engines' · Indexed, though blocked by robots.txt · My site disappeared from Google.