# Page is set to “noindex”

> A noindex tag tells search engines to drop the page from results entirely. If it is not deliberate — often a staging leftover — remove it.

_Category: Search visibility · Detector `seo` · Check `noindex` · Severity: error_

A `<meta name="robots" content="noindex">` tells search engines to leave the page out of results entirely — the single most damaging SEO mistake because the page simply disappears. It is very often a leftover from a staging or “coming soon” environment that shipped to production. If it is not deliberate, it is an emergency.

## Symptoms

- The page vanished from Google after a deploy
- Search Console reports “Excluded by ‘noindex’ tag”
- A staging-wide `noindex` made it into the production build

## How VibeCheck detects it

The `seo` detector flags this live in the browser and reports it to the widget's Problems list — and to your coding agent over MCP.

- **Issue string:** `Page is set to "noindex"`
- **Threshold:** <meta name="robots" content> includes 'noindex'

## Root causes

- A staging/preview environment’s global `noindex` shipped to production
- An environment flag that toggles `noindex` is misconfigured in prod
- A CMS “hidden” toggle was left on for a live page

## The fix

Remove the `noindex` directive from any page that should be indexed. If you gate indexing by environment, make sure production never emits `noindex` — and double-check the header form (`X-Robots-Tag`) too, not just the meta tag.

### Steps

1. Search the codebase for “noindex” (meta tag and `X-Robots-Tag` header)
2. Ensure production never emits it; gate it strictly to non-prod
3. Request re-indexing in Search Console once removed

```html
<!-- remove this on any page that should rank -->
<meta name="robots" content="noindex" />
```

## Framework-specific fixes

### React

Only render the robots meta tag in non-production environments.

```tsx
{import.meta.env.PROD ? null : <meta name="robots" content="noindex" />}
```

### Next.js

Control indexing via the metadata `robots` field, gated by environment so production always indexes.

```tsx
export const metadata: Metadata = {
  robots: { index: process.env.VERCEL_ENV === 'production', follow: true },
}
```

[Next.js docs](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#robots)

### Svelte

Guard the `noindex` tag by environment inside `<svelte:head>`.

```svelte
<svelte:head>
  {#if !import.meta.env.PROD}
    <meta name="robots" content="noindex" />
  {/if}
</svelte:head>
```

### Vanilla JS

Only inject the `noindex` tag (or `X-Robots-Tag` header) in staging; strip it from production builds.

```html
<!-- staging only; must not ship to production -->
<meta name="robots" content="noindex" />
```

## FAQ

### How fast will my page come back after removing `noindex`?

It returns on the next crawl, which can be hours to weeks. Request indexing in Google Search Console to speed it up once the tag is gone.

### Is there a header version of `noindex` I might be missing?

Yes — the `X-Robots-Tag` HTTP header does the same thing and is easy to overlook. Check your server/CDN config as well as the meta tag.

### What is the correct tag for pages I do want indexed?

You do not need any robots tag for the default indexable behaviour. Only add a robots meta when you specifically want to restrict indexing.

## Related problems

- [Missing canonical link](https://vibecheck.wcgw.fun/fix/missing-canonical-url.md) — Search visibility
- [Missing robots.txt](https://vibecheck.wcgw.fun/fix/missing-robots-txt.md) — Search visibility
- [Missing or invalid sitemap.xml](https://vibecheck.wcgw.fun/fix/missing-sitemap.md) — Search visibility
- [robots.txt blocks AI crawlers](https://vibecheck.wcgw.fun/fix/ai-crawlers-blocked.md) — AI readiness

---

Fix guide from VibeCheck — https://vibecheck.wcgw.fun/fix/accidental-noindex. Full site index for LLMs: https://vibecheck.wcgw.fun/llms.txt
