Install
openclaw skills install indexnow-setupSet up IndexNow for any website to enable real-time URL submission to Bing, Yandex, Seznam, and other search engines. Use when the user needs to (1) configure IndexNow for a website, (2) generate and place an IndexNow key file, (3) create a URL submission script, (4) integrate IndexNow into a build/deploy pipeline, or (5) fix Google/Bing indexing delays by pushing URLs proactively.
openclaw skills install indexnow-setupIndexNow is a protocol that lets websites notify search engines about new, updated, or deleted URLs in real time. Instead of waiting for crawlers, you push URLs directly to api.indexnow.org, and participating search engines (Bing, Yandex, Seznam, Naver) pick them up.
Generate a random 32-character hex key:
node -e "console.log(require('crypto').randomBytes(16).toString('hex'))"
Place a .txt file named <key>.txt containing only the key string into the site's public root:
public/<key>.txtpublic/<key>.txtdist/ or public/)public/<key>.txtpublic/<key>.txtAfter deploy, the file must be accessible at https://<domain>/<key>.txt with a 200 response containing only the key string.
Copy scripts/submit-indexnow.mjs from this skill into the project (e.g., scripts/submit-indexnow.mjs).
If the project already has package.json, add an npm script:
"indexnow": "node scripts/submit-indexnow.mjs"
Or add a site_url and key pair inline:
"indexnow": "node scripts/submit-indexnow.mjs https://example.com abcd1234..."
The script reads URLs from /sitemap.xml. Ensure the site generates a valid sitemap at that path. For Next.js App Router, this is typically app/sitemap.ts.
Run after every deploy or content update:
npm run indexnow
The script:
sitemap.xml from the site<loc> URLshttps://api.indexnow.org/IndexNowFor non-Node projects, invoke the script directly:
node scripts/submit-indexnow.mjs https://example.com <key>
Use Bing Webmaster Tools to confirm URLs are being received. Check the URL inspection tool for submission history.
The script accepts arguments or environment variables:
| Priority | Source |
|---|---|
| 1st | CLI args: node submit-indexnow.mjs <url> <key> |
| 2nd | SITE_URL + INDEXNOW_KEY env vars |
| Status | Meaning |
|---|---|
| 200 | URLs submitted successfully |
| 400 | Invalid request format |
| 403 | Key not found or invalid |
| 422 | URLs don't belong to the host |
| 429 | Rate limited (spam protection) |