# IndexNow Setup Guide — push notifications for Bing, Copilot and Yandex

**Canonical:** https://www.eastbound.ai/indexnow-setup-guide/
**Updated:** 2026-05-07

IndexNow is the search-side equivalent of webhooks. Instead of waiting for engines to re-crawl on their schedule, you push them a notification the instant a URL changes. Bing, Copilot and Yandex consume it directly; through Bing's distribution layer, the same ping reaches Yahoo, DuckDuckGo, and parts of ChatGPT's web tool. Setup is a one-time 30-minute job.

## Why IndexNow matters even though Google does not consume it

Google announced in 2021 that it would test IndexNow and has not adopted it. Search-side, that's a real loss. AI-side, the picture is different. Bing's index feeds Microsoft Copilot directly, and a substantial fraction of ChatGPT's web tool calls hit Bing as the upstream search provider. Pages Bing has indexed quickly with current content are pages those AI surfaces can cite.

For sites that publish frequently — pricing changes, product launches, breaking research, news — the gap between content edit and Bing index can be days without IndexNow and minutes with it.

**What IndexNow is not.** It is not a substitute for sitemap.xml. It is not a ranking lever. It is not a way to get a page indexed that engines have decided not to index for quality reasons. Treat it as a freshness signal.

## Setup: five steps

### Step 1: generate a key

8–128 character string from `[a-zA-Z0-9-]`:

```
# macOS / Linux
openssl rand -hex 16

# Or via Python
python3 -c "import secrets; print(secrets.token_hex(16))"
```

Save the key — you will need it on every ping.

### Step 2: deploy the key file

Place a file at `https://www.example.com/<key>.txt` whose body is exactly the key as plain text:

```
# File path on the host root
8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b.txt

# File contents (just the key, no surrounding whitespace)
8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b
```

Must return HTTP 200 with `Content-Type: text/plain`. On S3:

```
echo -n "8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b" > key.txt
aws s3 cp key.txt s3://www.example.com/8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b.txt \
  --content-type "text/plain; charset=utf-8" \
  --cache-control "no-cache"
```

Verify: `curl -s https://www.example.com/<key>.txt` returns the key string.

### Step 3: register in Bing Webmaster Tools

`bing.com/webmasters/`. Add the site, verify ownership (XML, DNS TXT, or meta tag). Settings → API access → IndexNow associates the deployed key file with your verified property.

### Step 4: ping the API on every URL change

**Single URL (GET):**

```
curl "https://api.indexnow.org/IndexNow?url=https://www.example.com/foo/&key=8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b"
```

**Multiple URLs (POST):**

```
curl -X POST "https://api.indexnow.org/IndexNow" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{
    "host": "www.example.com",
    "key": "8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b",
    "keyLocation": "https://www.example.com/8e3f9a2b4c1d5e7f0a3b6c2d4e8f1a9b.txt",
    "urlList": [
      "https://www.example.com/foo/",
      "https://www.example.com/bar/"
    ]
  }'
```

200 / 202 = accepted. 400 / 403 = key file unreachable or mismatched. 422 = URL not on verified host.

### Step 5: integrate with your publishing flow

- **Static-site builds** — deploy hook diffs the new sitemap against the previous and POSTs changed URLs. Hugo, 11ty and Astro have community plugins.
- **WordPress** — official IndexNow plugin (or Bing's). Pings on every save / update.
- **Headless CMS** — webhook from Contentful / Sanity / Strapi → small serverless function that POSTs.
- **Edge / dynamic sites** — call IndexNow from your write path immediately after persisting a content change.

Cost: one HTTP request per content change. Limits: up to 10,000 URLs per submission; reasonable submission frequency for legitimate use.

## Which engines consume an IndexNow ping

| Engine | Consumes? | Notes |
|---|---|---|
| Bing | Yes | Direct consumer; fastest path to Bing's index. |
| Microsoft Copilot | Yes (via Bing) | Copilot's web grounding uses Bing's index. |
| ChatGPT web tool | Partially (via Bing) | OpenAI's web tool uses Bing as one upstream. |
| Yandex | Yes | Direct consumer; mostly RU-language. |
| DuckDuckGo | Yes (via Bing) | Sources from Bing's index. |
| Yahoo Search | Yes (via Bing) | Same. |
| Naver | Yes | KR-language audiences. |
| Seznam (CZ) | Yes | Direct consumer. |
| Google | No | Use sitemap + GSC URL inspection. |
| Baidu | No (separate protocol) | Baidu has its own push API. |
| DeepSeek / Qwen / Doubao | No direct support | Mainland Chinese AI engines use Baidu's protocol or direct crawl. |

## Gotchas

- **Key file content-type.** Must be `text/plain`. S3 default `application/octet-stream` will fail verification.
- **One key per host.** `www.example.com` and `blog.example.com` need separate deployments of the key file.
- **HTTPS required.** Both the URLs being pinged and the key file must be HTTPS.
- **Don't ping unchanged URLs.** Push only on real content changes. Daily pings without changes get deprioritised.
- **Sitemap still required.** IndexNow is freshness, not discovery. Keep `sitemap.xml`.

## Related reading

- [AI crawler readiness — the infrastructure layer](https://www.eastbound.ai/ai-crawler-readiness/)
- [llms.txt vs robots.txt](https://www.eastbound.ai/llms-txt-vs-robots-txt/)
- [Markdown alternates guide](https://www.eastbound.ai/markdown-alternates-guide/)
- [AI crawler blocking mistakes](https://www.eastbound.ai/ai-crawler-blocking-mistakes/)
- [China AI visibility pillar](https://www.eastbound.ai/china-ai-visibility/)
