# 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.

## Prompt for your agent

> "Add www.example.com to FreshlyCited's IndexNow sites, tell me the key file to upload, and verify it when I say it's done."

## 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)](https://freshlycited.com/docs/indexnow).


---
Source: https://freshlycited.com/docs/recipes/verify-site-indexnow
