Skip to content
SeenLens

IndexNow: what it is and how to set it up

IndexNow is a protocol that lets a site tell search engines which URLs were added, updated or deleted. You submit the URLs once and the participating engines share them. Bing, Yandex, Naver, Seznam.cz and Yep take part. Google does not. Submission does not guarantee indexing.

By SeenLens · Last updated

What is IndexNow?

IndexNow is an open protocol documented at indexnow.org. It replaces the wait for a crawler to find a change. Your site sends a short request that names the changed URLs. The search engine then decides when to crawl them.

The participating engines agree to share submitted URLs with each other. You send a request to one endpoint, and every IndexNow engine can see it. An engine joins if it has a noticeable presence in at least one market, or if it is closely linked to the search market and adds significant submission volume.

Microsoft recommends IndexNow in its guidance for the Bing AI Performance report. The report counts citations in Copilot and Bing AI answers, and IndexNow is one way to tell Bing about new and changed pages. See the Bing AI Performance guide.

Which search engines use IndexNow?

The IndexNow FAQ lists endpoints for these engines. We checked the list on 2026-11-06:

IndexNow endpoints listed in the IndexNow FAQ
EngineTakes part
AmazonYes
BingYes
NaverYes
Seznam.czYes
YandexYes
YepYes
IndexNow global endpoint (api.indexnow.org)Yes, shared with all engines
GoogleNot listed

The indexnow.org home page names Microsoft Bing, Naver, Seznam.cz, Yandex and Yep. Check the FAQ for changes before you rely on the list.

Does Google use IndexNow?

No. Google is not on the IndexNow engine list. Google's page on asking for a recrawl names two methods: the URL Inspection tool for a few URLs, and a sitemap for many URLs. That page does not mention IndexNow. We found no Google announcement of IndexNow support.

For Google, keep an accurate sitemap with correct lastmod dates and submit it in Search Console. Add IndexNow for Bing and the other engines. The two do not conflict.

How do you set up IndexNow?

  1. Make a key. A key has 8 to 128 characters: letters, digits and dashes. A random hex string works. Run openssl rand -hex 16 for 32 characters.
  2. Host the key file. Save a UTF-8 text file named {your-key}.txt in the site root. The file contains only the key. The URL is https://example.com/{your-key}.txt.
  3. Submit URLs. Send one URL with a GET request, or many URLs with a POST request.
  4. Check the response. Read the HTTP status code (table below) and, for Bing, the IndexNow report in Bing Webmaster Tools.

You can host the key file in another location on the same host. Then pass its address in the keyLocation field. A key file in /catalog/ covers only URLs under /catalog/.

Submit one URL with curl (GET)
curl "https://api.indexnow.org/indexnow?url=https%3A%2F%2Fexample.com%2Fnew-page&key=YOUR_KEY"
Submit many URLs with curl (POST)
curl -X POST https://api.indexnow.org/indexnow \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{
    "host": "example.com",
    "key": "YOUR_KEY",
    "keyLocation": "https://example.com/YOUR_KEY.txt",
    "urlList": [
      "https://example.com/new-page",
      "https://example.com/updated-page"
    ]
  }'
IndexNow response codes
CodeMeaning
200The URLs were submitted.
202Received. Key validation is pending.
400The request format is invalid.
403The key is not valid. The key file is missing or does not contain the key.
422The URLs do not belong to the host, or the key does not match the protocol schema.
429Too many requests. Slow down and read the Retry-After header.

How do you use IndexNow in Next.js?

Put the key file in the public folder, so Next.js serves it from the site root. Store the key in an environment variable. Then write one function that posts changed URLs:

public/YOUR_KEY.txt
YOUR_KEY
lib/indexnow.ts
const HOST = "example.com";
const KEY = process.env.INDEXNOW_KEY!;

export async function submitToIndexNow(urls: string[]) {
  if (urls.length === 0) return null;
  const res = await fetch("https://api.indexnow.org/indexnow", {
    method: "POST",
    headers: { "Content-Type": "application/json; charset=utf-8" },
    body: JSON.stringify({
      host: HOST,
      key: KEY,
      keyLocation: "https://" + HOST + "/" + KEY + ".txt",
      urlList: urls.slice(0, 10000),
    }),
  });
  return res.status; // 200 or 202 means accepted
}

Call the function when content changes, for example from a route handler that your CMS calls after a publish. Protect that route with a secret:

app/api/publish-hook/route.ts
import { submitToIndexNow } from "@/lib/indexnow";

export async function POST(req: Request) {
  if (req.headers.get("x-hook-secret") !== process.env.HOOK_SECRET) {
    return new Response("forbidden", { status: 403 });
  }
  const { urls } = (await req.json()) as { urls: string[] };
  const status = await submitToIndexNow(urls);
  return Response.json({ status });
}

SeenLens does it with a shell script. scripts/indexnow.sh reads the key from the site configuration and posts URLs to api.indexnow.org after a deploy. Given no arguments, it submits every URL in the live sitemap. Given URLs, it submits only those. For a large site, pass only the changed URLs.

What are the limits of IndexNow?

  • No guarantee. The FAQ states that submitting a URL does not guarantee immediate indexing. It only raises the chance of faster discovery and crawling.
  • 10,000 URLs per POST. More can fail with a 422 error.
  • Submit real changes only. Resubmitting unchanged URLs wastes crawl quota. Wait at least 5 minutes before you resubmit the same URL, and avoid many resubmissions per day.
  • Crawl quota. Every submitted URL counts toward your site's crawl quota. Engines do not publish exact rate limits and each sets its own daily thresholds.
  • Same host. The URLs must belong to the host in the request. Otherwise you get a 422.
  • No ranking effect. IndexNow reports a change. It does not say a page deserves a rank.

No engine publishes a time between submission and indexing, so we give no figure. Bing offers an IndexNow Insights report in Bing Webmaster Tools (announced 2024-03-03). It lists the number of URLs submitted, crawled and indexed, with the status of the latest 1,000 submitted URLs.

Frequently asked questions about IndexNow

What is IndexNow?

IndexNow is an open protocol. A site sends a request that lists added, updated or deleted URLs, and the participating search engines share it. The engine then decides when to crawl those URLs.

Does Google support IndexNow?

No. Google is not on the IndexNow engine list, and Google's recrawl documentation names only the URL Inspection tool and sitemaps. Keep a current sitemap for Google.

Does IndexNow help SEO?

It can speed up discovery in the engines that take part. It does not raise rankings. It does not guarantee indexing.

How long does IndexNow take?

No engine publishes a figure. Each engine crawls on its own schedule and uses your crawl quota. Check Bing Webmaster Tools to see what Bing received.

Do I submit the same URL to every search engine?

No. A request to one endpoint, such as api.indexnow.org, is shared with all participating engines.

Should I submit every page in my sitemap?

Only for a first load. After that, submit URLs that were added, updated or deleted. The FAQ lists resubmitting unchanged URLs as a common mistake.

Sources