---
title: "IndexNow and Indexing APIs in Nuxt"
description: "Push URL changes to Bing and Yandex instantly with IndexNow, and see where Google's Indexing API actually helps in a Nuxt app."
canonical_url: "https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexnow"
last_updated: "2026-07-16"
---

<key-takeaways>

- IndexNow pushes URL changes straight to Bing, Yandex, Naver, Seznam.cz, and Yep; Google does not participate
- The Google Indexing API only works for pages marked up with JobPosting or BroadcastEvent schema, everything else gets ignored
- `nuxt-ai-ready` adds IndexNow support to a Nuxt app with a single config flag, no key management required

</key-takeaways>

Search engines discover content changes by crawling on their own schedule, and Google won't commit to a timeline for how long that takes. Indexing APIs let you skip the wait and notify a search engine the moment you publish, update, or delete content.

## IndexNow Protocol

IndexNow is an [open-source protocol](https://www.indexnow.org/) that notifies search engines instantly when URLs change. Instead of waiting for crawlers to discover updates, you push notifications directly to participating engines.

Supported search engines:

- Microsoft Bing, the protocol's primary backer
- Yandex
- Seznam.cz
- Naver
- Yep, Ahrefs' privacy-focused search engine

Google does not support IndexNow. For Google, use Search Console's manual "Request Indexing" or the Indexing API covered below.

IndexNow is also the fastest way to get content into Bing and Copilot's index, since Copilot answers draw on Bing's search index. Bing has said [sitemaps and IndexNow both feed how it surfaces content in AI-powered search](https://blogs.bing.com/webmaster/July-2025/Keeping-Content-Discoverable-with-Sitemaps-in-AI-Powered-Search). Whether [Perplexity](https://perplexity.ai) benefits isn't confirmed by any of its own documentation, so treat that as speculative rather than a reason to adopt IndexNow on its own.

### When to Use IndexNow

Use IndexNow when:

- Publishing new time-sensitive content (news, product drops)
- Updating existing pages (price corrections, availability)
- Deleting pages, so a stale result doesn't linger in search

Don't use it for styling or layout-only changes.

### Setting Up IndexNow

Generate an API key. The spec requires 8 to 128 characters, using only letters, numbers, and dashes:

```bash
openssl rand -hex 32
```

Create a key file in your `public` directory:

```txt [public/abc123def456.txt]
abc123def456
```

The key must be accessible at `https://yoursite.com/{key}.txt`.

### Submitting URLs

Submit URLs after content changes. One notification reaches all IndexNow engines:

```ts [server/api/indexnow.post.ts]
export default defineEventHandler(async (event) => {
  const { urls } = await readBody(event)

  await $fetch('https://api.indexnow.org/indexnow', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: {
      host: 'yoursite.com',
      key: useRuntimeConfig().indexnowKey,
      keyLocation: `https://yoursite.com/${useRuntimeConfig().indexnowKey}.txt`,
      urlList: urls
    }
  })

  return { success: true, count: urls.length }
})
```

You can submit up to 10,000 URLs in one POST. For a single URL, a GET request works too:

```txt
https://api.indexnow.org/indexnow?url=https://yoursite.com/page&key=abc123def456
```

## Automate It with Nuxt AI Ready

The [`nuxt-ai-ready`](https://nuxtseo.com/docs/ai-ready/guides/indexnow) module handles the setup above for you:

```ts [nuxt.config.ts]
export default defineNuxtConfig({
  modules: ['nuxt-ai-ready'],
  aiReady: {
    indexNow: true
  }
})
```

It derives a stable key from your site URL, serves the key file automatically, and submits URLs for you:

- **Static sites** get build-time submission: each page's content is hashed, compared against the previous build, and only changed URLs go out
- **SSR sites** get a `POST /__ai-ready/indexnow` endpoint you can call after a publish, plus an automatic sync that runs every minute

<module-card className="w-1/2" slug="ai-ready">



</module-card>

## Google Indexing API

[Google's Indexing API](https://developers.google.com/search/apis/indexing-api/v3/quickstart) is limited to `JobPosting` and `BroadcastEvent` schema types only.

Don't use it for blog posts or general products. Google [confirmed](https://developers.google.com/search/apis/indexing-api/v3/quickstart) that submitting other content types won't help or hurt your rankings; it's simply ignored.

The default quota is [200 publish requests per day per project](https://developers.google.com/search/apis/indexing-api/v3/quota-pricing), resetting at midnight Pacific. To go beyond that you submit a quota-increase request through Google Cloud, not a general "partner authorization" process, and approval is still limited to JobPosting and BroadcastEvent content.

## RequestIndexing Tool

[RequestIndexing](https://requestindexing.com/) by [@harlan_zw](https://x.com/harlan_zw) uses your Search Console OAuth credentials to submit URLs directly to Google's Indexing API on your behalf, then polls for status. It's a way to bulk-submit through the same official endpoint Google's own quickstart describes, rather than a workaround.

Use cases:

- Bulk indexing after a site migration
- Emergency re-crawl requests for time-sensitive content
- Forcing a re-crawl after fixing critical [SEO issues](/learn-seo/nuxt/launch-and-listen/indexing-issues)

## Choosing the Right Method

<table>
<thead>
  <tr>
    <th>
      Method
    </th>
    
    <th>
      Best For
    </th>
    
    <th>
      Limitations
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      IndexNow
    </td>
    
    <td>
      Bing, Yandex, Naver, Seznam.cz, Yep
    </td>
    
    <td>
      Doesn't reach Google
    </td>
  </tr>
  
  <tr>
    <td>
      Google Indexing API
    </td>
    
    <td>
      Job listings, livestream events
    </td>
    
    <td>
      JobPosting/BroadcastEvent only
    </td>
  </tr>
  
  <tr>
    <td>
      RequestIndexing
    </td>
    
    <td>
      Bulk Google submissions
    </td>
    
    <td>
      Still subject to Google's quota
    </td>
  </tr>
  
  <tr>
    <td>
      XML Sitemap
    </td>
    
    <td>
      Routine discovery
    </td>
    
    <td>
      No urgency signal
    </td>
  </tr>
</tbody>
</table>

Implement IndexNow for all content changes; it's free and instant for the engines that support it. For Google, rely on XML sitemaps for discovery and RequestIndexing when you need an urgent re-crawl.

## Checklist

<checklist id="nuxt-indexnow">

- Generate an IndexNow key and serve it at `/{key}.txt`, or enable `aiReady: { indexNow: true }` to skip that step
- Trigger IndexNow submission from your publish/update workflow
- Confirm your sitemap is submitted in Search Console for Google discovery
- Reserve the Google Indexing API for JobPosting/BroadcastEvent content only
- Use RequestIndexing for bulk or urgent Google re-crawls, not routine publishing

</checklist>
