IndexNow · Nuxt AI Ready · Nuxt SEO

[NuxtSEO Pro](https://nuxtseo.com/ "Home")

- [Modules](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Tools](https://nuxtseo.com/tools)
- [Pro](https://nuxtseo.com/pro)
- [Learn SEO](https://nuxtseo.com/learn-seo/nuxt) [Releases](https://nuxtseo.com/releases)

[Sign In](https://nuxtseo.com/auth/github)

[Nuxt SEO on GitHub](https://github.com/harlan-zw/nuxt-seo)

[User Guides](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

[API](https://nuxtseo.com/docs/ai-ready/api/config)

[Releases](https://nuxtseo.com/docs/ai-ready/releases/v1)

AI Ready

- [Switch to AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)
- [Switch to Nuxt SEO](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Switch to Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Switch to Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [Switch to OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Switch to Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Switch to Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [Switch to SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Switch to Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Switch to Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)

Search…```k`` /`

v1.1.2

- [Discord Support](https://discord.com/invite/275MBUBvgP)

### Getting Started

- [Introduction](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)
- [Installation](https://nuxtseo.com/docs/ai-ready/getting-started/installation)

### Core Concepts

- [AI Content Signals](https://nuxtseo.com/docs/ai-ready/guides/content-signals)
- [llms.txt Generation](https://nuxtseo.com/docs/ai-ready/guides/llms-txt)
- [Markdown Conversion](https://nuxtseo.com/docs/ai-ready/guides/markdown)
- [Model Context Protocol (MCP)](https://nuxtseo.com/docs/ai-ready/guides/mcp)
- [Runtime Sync (Optional)](https://nuxtseo.com/docs/ai-ready/guides/runtime-indexing)
- [Cloudflare Deployment](https://nuxtseo.com/docs/ai-ready/guides/cloudflare)
- [IndexNow](https://nuxtseo.com/docs/ai-ready/guides/indexnow)
- [CLI](https://nuxtseo.com/docs/ai-ready/guides/cli)

### Advanced

- [RAG Setup](https://nuxtseo.com/docs/ai-ready/advanced/rag-example)

Core Concepts

# IndexNow

[Copy for LLMs](https://nuxtseo.com/docs/ai-ready/guides/indexnow.md)

IndexNow is a protocol for instantly notifying search engines when URLs change, enabling faster indexing than waiting for crawlers.

Nuxt AI Ready supports IndexNow for both **static sites** (build-time) and **server-rendered sites** (runtime).

## [Supported Search Engines](#supported-search-engines)

Submitting to IndexNow notifies all participating engines:

| Engine | Endpoint |
| --- | --- |
| Bing | api.indexnow.org |
| Yandex | yandex.com/indexnow |
| Naver | searchadvisor.naver.com/indexnow |
| Seznam | search.seznam.cz/indexnow |

## [Getting Started](#getting-started)

nuxt.config.ts

```
export default defineNuxtConfig({
  aiReady: {
    indexNow: true
  }
})
```

That's it. A stable key is derived from your site URL automatically.

## [Static Sites (Build-Time)](#static-sites-build-time)

For static sites generated with `nuxi generate`, IndexNow submissions happen automatically at build time using **hash-based change detection**.

### [How It Works](#how-it-works)

```
┌─────────────────────────────────────────────────────────────┐
│ First Deploy                                                 │
│   Build → generate page hashes → create pages.meta.json     │
│   No previous meta found → skip IndexNow                    │
├─────────────────────────────────────────────────────────────┤
│ Subsequent Deploys                                           │
│   Build → fetch pages.meta.json from live site              │
│   Compare hashes → detect changes (modified/added pages)    │
│   Submit changed URLs to IndexNow                           │
│   Write new pages.meta.json for next deploy                 │
└─────────────────────────────────────────────────────────────┘
```

Each page gets a content hash stored in `/__ai-ready/pages.meta.json`. On subsequent builds, the module compares hashes to detect which pages changed and only submits those URLs to IndexNow.

### [Pages Metadata Endpoint](#pages-metadata-endpoint)

```
GET /__ai-ready/pages.meta.json
```

```
{
  "buildId": "abc123",
  "pageCount": 50,
  "createdAt": "2025-01-15T10:30:00Z",
  "pages": [
    { "route": "/", "hash": "986b464b8e7db2cb" },
    { "route": "/about", "hash": "150f2c142a4edb9d" }
  ]
}
```

### [Static Site Setup](#static-site-setup)

nuxt.config.ts

```
export default defineNuxtConfig({
  aiReady: {
    indexNow: true
  }
})
```

Run `nuxi generate` and deploy. Changed pages will be submitted to IndexNow automatically.

## [Server-Rendered Sites (Runtime)](#server-rendered-sites-runtime)

For SSR sites, IndexNow syncs pages that were indexed at runtime. Enable with `cron: true` or call the sync endpoint manually.

### [Automatic Syncing (Cron)](#automatic-syncing-cron)

When `cron: true`, IndexNow syncs automatically every minute after indexing runs:

```
┌─────────────────────────────────────────────────────────────┐
│ Cron triggers ai-ready task (every minute)                   │
│           ↓                                                  │
│ batchIndexPages() → index pending pages                     │
│           ↓                                                  │
│ syncToIndexNow() → submit changed pages to search engines   │
│                  → update indexnow_synced_at                │
└─────────────────────────────────────────────────────────────┘
```

nuxt.config.ts

```
export default defineNuxtConfig({
  aiReady: {
    cron: true,
    indexNow: true
  }
})
```

### [Manual Sync via Endpoint](#manual-sync-via-endpoint)

For manual integration, use `POST /__ai-ready/indexnow` endpoint directly.

## [API Endpoints](#api-endpoints)

### [Key Verification](#key-verification)

Search engines verify your key at `/{key}.txt`:

```
GET /your-api-key.txt
# Returns: your-api-key
```

The module automatically registers this route.

### [Sync Endpoint](#sync-endpoint)

Submit pending pages to IndexNow:

```
POST /__ai-ready/indexnow?limit=100
# Requires header: Authorization: Bearer <token>
```

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| `limit` | `number` | `100` | Max URLs per batch |
| `Authorization` header | `Bearer<token>` | - | Required if `runtimeSyncSecret` configured |

**Response:**

```
{
  "success": true,
  "submitted": 50,
  "remaining": 150,
  "error": null
}
```

### [Status Endpoint](#status-endpoint)

Check IndexNow stats:

```
GET /__ai-ready/status
```

```
{
  "total": 100,
  "indexed": 95,
  "pending": 5,
  "indexNow": {
    "pending": 10,
    "totalSubmitted": 500,
    "lastSubmittedAt": 1704067200000,
    "lastError": null
  }
}
```

## [Integration with Runtime Sync](#integration-with-runtime-sync)

Chain IndexNow after polling using the [CLI](https://nuxtseo.com/docs/ai-ready/guides/cli):

```
# Index new/changed pages
npx nuxt-ai-ready poll --all

# Notify search engines of changes
npx nuxt-ai-ready indexnow
```

For production, specify the URL:

```
npx nuxt-ai-ready poll --all --url https://mysite.com
npx nuxt-ai-ready indexnow --url https://mysite.com
```

Or trigger from a scheduled task/cron job:

server/tasks/sync-search-engines.ts

```
import { syncToIndexNow } from '#ai-ready'

export default defineTask({
  meta: { name: 'sync-search-engines' },
  async run({ payload, context }) {
    const result = await syncToIndexNow(context.event, 100)
    return { result: \`Submitted ${result.submitted} URLs\` }
  }
})
```

## [Rate Limits & Fallback](#rate-limits-fallback)

IndexNow has generous limits:

- Up to 10,000 URLs per request
- Up to 100,000 URLs per day

The module handles rate limits automatically:

1. **Fallback to Bing**: If `api.indexnow.org` returns 429, the module retries via `www.bing.com/indexnow`
2. **Exponential backoff**: On repeated rate limits, backs off from 5min → 10min → 20min → 40min → 1hr

## [Troubleshooting](#troubleshooting)

### [Key Verification Fails](#key-verification-fails)

Ensure your key route is accessible:

```
curl https://yoursite.com/your-api-key.txt
# Should return: your-api-key
```

### [Submissions Fail](#submissions-fail)

Check the status for errors:

```
npx nuxt-ai-ready status
```

Common errors:

- `403`: Key not found at keyLocation
- `422`: URLs don't match host
- `429`: Rate limited

[Edit this page](https://github.com/nuxt-seo-pro/nuxt-ai-ready/edit/main/docs/content/2.guides/6.indexnow.md)

[Markdown For LLMs](https://nuxtseo.com/docs/ai-ready/guides/indexnow.md)

Did this page help you?

### Related

[CLI](https://nuxtseo.com/docs/ai-ready/guides/cli) [Configuration](https://nuxtseo.com/docs/ai-ready/api/config) [Runtime Sync](https://nuxtseo.com/docs/ai-ready/guides/runtime-indexing)

[Cloudflare Deployment Deploy with Cloudflare D1 for persistent database storage.](https://nuxtseo.com/docs/ai-ready/guides/cloudflare) [CLI Command-line interface for managing runtime sync and IndexNow.](https://nuxtseo.com/docs/ai-ready/guides/cli)

On this page

- [Supported Search Engines](#supported-search-engines)
- [Getting Started](#getting-started)
- [Static Sites (Build-Time)](#static-sites-build-time)
- [Server-Rendered Sites (Runtime)](#server-rendered-sites-runtime)
- [API Endpoints](#api-endpoints)
- [Integration with Runtime Sync](#integration-with-runtime-sync)
- [Rate Limits & Fallback](#rate-limits-fallback)
- [Troubleshooting](#troubleshooting)

[GitHub](https://github.com/harlan-zw/nuxt-seo) [ Discord](https://discord.com/invite/275MBUBvgP)

### [NuxtSEO](https://nuxtseo.com/ "Home")

- [Getting Started](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [MCP](https://nuxtseo.com/docs/nuxt-seo/guides/mcp)

Modules

- [Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)
- [AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

### [NuxtSEO Pro](https://nuxtseo.com/pro "Nuxt SEO Pro")

- [Getting Started](https://nuxtseo.com/pro)
- [Dashboard](https://nuxtseo.com/pro/dashboard)
- [Pro MCP](https://nuxtseo.com/pro/docs/getting-started/mcp-setup)

### [Learn SEO](https://nuxtseo.com/learn-seo "Learn SEO")

Nuxt

- [Mastering Meta](https://nuxtseo.com/learn-seo/nuxt/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers)
- [Launch & Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)
- [Routes & Rendering](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering)
- [Staying Secure](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security)

Vue

- [Vue SEO Guide](https://nuxtseo.com/learn-seo/vue)
- [Mastering Meta](https://nuxtseo.com/learn-seo/vue/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/vue/controlling-crawlers)
- [SPA SEO](https://nuxtseo.com/learn-seo/vue/spa)
- [SSR Frameworks](https://nuxtseo.com/learn-seo/vue/ssr-frameworks)
- [SEO Checklist](https://nuxtseo.com/learn-seo/checklist)
- [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup)
- [Backlinks & Authority](https://nuxtseo.com/learn-seo/backlinks)

### [Tools](https://nuxtseo.com/tools "SEO Tools")

- [Social Share Debugger](https://nuxtseo.com/tools/social-share-debugger)
- [Robots.txt Generator](https://nuxtseo.com/tools/robots-txt-generator)
- [Meta Tag Checker](https://nuxtseo.com/tools/meta-tag-checker)
- [HTML to Markdown](https://nuxtseo.com/tools/html-to-markdown)
- [XML Sitemap Validator](https://nuxtseo.com/tools/xml-sitemap-validator)
- [Schema.org Validator](https://nuxtseo.com/tools/schema-validator)
- [Keyword Idea Generator](https://nuxtseo.com/tools/keyword-generator)
- [Keyword Research](https://nuxtseo.com/tools/keyword-research)
- [SERP Analyzer](https://nuxtseo.com/tools/serp-analyzer)
- [Domain Rankings](https://nuxtseo.com/tools/domain-rankings)

Copyright © 2023-2026 Harlan Wilton - [MIT License](https://github.com/harlan-zw/nuxt-seo/blob/main/license) · [mdream](https://mdream.dev)