Skip to content
Docs menu

Recipe: verify your site for IndexNow

Goal: every push for your domain also notifies Bing (and Copilot, Yandex, Seznam, Naver, Yep) through IndexNow. Free. Takes a few minutes, mostly uploading one small file. IndexNow does not reach Google; your Google push works exactly as before.

The story · 3 steps
Get an API keyFree plan: 10 free links to try (once you verify your email), then 100 free checks a month, no card.

Prompt for your agent

1. Add the site

json
{
  "name": "add_indexnow_site",
  "arguments": {
    "host": "www.example.com"
  }
}
bash
curl -X POST https://freshlycited.com/api/v1/indexnow/sites -H "Authorization: Bearer ipk_YOUR_KEY" \
  -H "Content-Type: application/json" -d '{"host":"www.example.com"}'

The response includes id, key and key_file_url, for example https://www.example.com/3f9c…e1.txt. Add each hostname you use separately (example.com and www.example.com are different to IndexNow).

2. Publish the key file

Create a plain-text file named <key>.txt whose only content is the key, and upload it to the root of the site so it loads at key_file_url. On WordPress, upload it with your host's file manager or SFTP; on Vercel, Netlify or a static site, put it in the public folder.

Can't write to the root? Put it anywhere on the same host and set it as the key location; it then covers only URLs under that folder:

json
{
  "name": "update_indexnow_site",
  "arguments": {
    "site_id": "site_…",
    "key_location": "https://www.example.com/seo/3f9c…e1.txt"
  }
}

3. Verify

json
{
  "name": "verify_indexnow_site",
  "arguments": {
    "site_id": "site_…"
  }
}
bash
curl -X POST https://freshlycited.com/api/v1/indexnow/sites/site_…/verify -H "Authorization: Bearer ipk_YOUR_KEY"

verification.ok: true means you're done. Otherwise verification.detail says what's wrong in plain words, such as "The key file isn't there yet (HTTP 404…)" or "returned a web page, not the key".

4. Confirm on your next push

Push any URLs on that host as usual. The outcome adds a line like "3 links also sent to Bing (IndexNow)", and the per-link detail shows each IndexNow result:

json
{
  "name": "get_job_indexnow",
  "arguments": {
    "job_id": "job_…"
  }
}

accepted (HTTP 200) reads "Sent to Bing (IndexNow): received"; submitted (HTTP 202) reads "received, key pending", which is normal right after verification. Either way IndexNow got the notice; Bing still decides when, and whether, to index the page. FreshlyCited re-checks the key file daily and pauses notices (with an email) if it disappears twice in a row. More: Bing & Copilot (IndexNow).