Noindex checker
Enter a URL to see whether Google is allowed to index it, which rule says so and how to change it. It checks the robots meta tag, googlebot tags, the X-Robots-Tag header, robots.txt, redirects, the status code and the canonical.
What each signal says
Checks and fixes
Every response on the way
Five places a noindex can hide
Most noindex checkers read one meta tag. Google reads five things before it decides, and a page is out of the index if any one of them says so. The most restrictive rule wins.
| Where | What it looks like | Who sets it |
|---|---|---|
| Robots meta tag | <meta name="robots" content="noindex"> | The template, CMS or SEO plugin |
| Googlebot meta tag | <meta name="googlebot" content="noindex"> | The same, aimed at Google only |
| X-Robots-Tag header | X-Robots-Tag: noindex | The server, CDN or hosting platform |
| unavailable_after | unavailable_after: 2026-12-31 | Anyone who set an expiry and forgot it |
| robots.txt | Disallow: /blog/ | Not a noindex, but it hides one from Google |
The header is the one people miss. It never shows in view source, so a page can look clean and still be out of Google. Vercel, for example, adds X-Robots-Tag: noindex to every preview deployment.
robots.txt hides the noindex from Google
This is the mistake that keeps pages in Google after someone tries to remove them. Google's noindex documentation says the page "must not be blocked by a robots.txt file", because a crawler that cannot fetch the page "will never see the noindex rule, and the page can still appear in search results".
In Search Console that shows up as Indexed, though blocked by robots.txt. The fix runs in an order that feels backwards: allow crawling, let Google see the noindex and drop the page, and only then block it in robots.txt if you still want to save crawling.
Read the result
| Result | What it means | What to do |
|---|---|---|
| No noindex found | Google is allowed to index the page. | If it is still missing from Google, check URL Inspection. Allowed is not the same as indexed. |
| Noindex found | Google will drop the page when it next crawls it. | Keep it if the page should stay out. Otherwise remove the rule the checker names. |
| Blocked by robots.txt | Google cannot crawl the page, but can still list the URL from links. | Remove the rule if the page should rank. Use noindex if it should not. |
| Noindex found, but Google cannot see it | The noindex never takes effect. | Remove the robots.txt rule first, so Google can read the noindex. |
| The page returns 404, 410 or 5xx | Google drops it for the status, noindex or not. | Restore the page or redirect it if it should exist. |
A noindex is not a fault on its own. Login pages, internal search results, thank you pages and filtered lists often should be out of Google. The question is whether you meant it.
Find where an accidental noindex comes from
The value tells you which layer wrote it. When the checker can tell the platform from the page, it names the setting to change.
- WordPress. Settings, then Reading, then "Discourage search engines from indexing this site". It prints
noindex, nofollowon every page, and it travels with a staging database copied to production. - SEO plugins. Yoast and Rank Math noindex whole content types and archives from one setting, and drop them from the sitemap at the same time.
- Shopify. A conditional noindex in
theme.liquid, theseo.hiddenmetafield, or an Unlisted product. - Webflow. The Sitemap indexing toggle in page settings adds the meta tag.
- Next.js. A page that calls
notFound()after streaming starts keeps a 200 status and gets a noindex tag. - Servers and CDNs. A header rule in nginx, Apache,
.htaccess, Netlify's_headersor a CDN. Only the header shows it.
Noindex and canonical ask for different things
A noindex says leave this page out. A canonical pointing at another URL says this is a copy, index that one instead. Google's duplicate URL guide advises against noindex for choosing a canonical, "because it will completely block the page from Search". For a duplicate, use the canonical alone. For a page that should not be in Google at all, use noindex and let the canonical point at the page itself.
JavaScript can add a noindex but not reliably remove one
The checker reads the HTML your server sends, before any script runs. Google's JavaScript guide says a script can add a robots tag, but when the first HTML already says noindex, Google "may skip rendering", so a script that removes it may never run. Put the right value in the server HTML.
Get a noindexed page back into Google
- Remove the rule the checker names, and check again here until it says no noindex found.
- Make sure the URL is in your XML sitemap and linked from a page Google already visits.
- In Search Console, open URL Inspection, run Test live URL, and check "Indexing allowed?" says yes.
- Press Request indexing. A page Google crawls often can come back within days. One it rarely visits can take weeks.
Check every page and Google's own index with your agent
This page checks one URL from the outside. Two questions it cannot answer: which other pages carry a noindex, and whether Google has actually dropped them. The seo crawl command lists every noindex, robots.txt block and canonical on a site from your own machine. The seo page command adds Google's own URL Inspection result for a page, through your Search Console. Ask:
Crawl example.com and list every page that has noindex or is blocked by robots.txt, then check which of them still get impressions in Search ConsoleInstall the CLI and run setup:
npm i -g seo && seo startOr add the hosted MCP server to your agent and sign in with Google:
Run it in a terminal, then sign in with Google.
Or run it on your machine
Installs the CLI, signs you in and adds the skill to your agents. Site crawls and Bing data run this way, on your own machine. A crawl fetches many pages, and Bing blocks our hosted server.
Once a page is indexable again, Index My Site can submit it to Google for you. We build it too.