Overview
IndexNow is an open protocol that lets you instantly notify search engines whenever a URL on your site is created, updated, or deleted. Instead of waiting for crawlers to find your changes, Sight AI pushes the URL straight to Bing’s IndexNow endpoint — and Bing relays it to every other participating engine. Once IndexNow is set up, Sight AI handles submissions for you automatically:- New URLs from your sitemap are submitted as soon as we detect them
- Articles you publish through Sight AI are submitted the moment they sync to your CMS
- Updated URLs are re-submitted when they change
Participating search engines
A single IndexNow submission reaches all of these:- Bing — Microsoft’s search engine
- Yandex — Russia’s largest search engine
- Seznam — Czech Republic’s search engine
- Naver — South Korea’s largest search engine
How verification works
Bing won’t accept submissions on behalf of a domain unless it can prove you own that domain. The proof is simple: you host a small text file at the root of your site that contains a unique key, and Bing fetches it whenever it accepts a submission. The Sight AI flow is:Generate a key in Sight AI
Host the key file at your site root
https://yourdomain.com/<your-key>.txt and return the key as plain text.Sight AI verifies the file is reachable
yourdomain.com) and www.yourdomain.com variants. As long as one of them returns the exact key, you’re verified.Before you start
You’ll need three things — Bing Webmaster Tools is the one most people forget, so we cover it first.A Bing Webmaster Tools account with your site added
Your site already added to Sight AI
A way to upload a file to your site root
/<key>.txt to a hosted asset.Prerequisite: Bing Webmaster Tools
Bing won’t accept IndexNow submissions for a domain until that domain is registered and verified inside Bing Webmaster Tools — it’s a separate Microsoft product from Sight AI, and there’s no way to skip it. The good news is the setup is short:Create a free Bing Webmaster Tools account
Add your site and verify ownership
https:// and the correct www/non-www variant). Bing offers four ways to verify ownership — XML file, meta tag, CNAME DNS record, or auto-import from Google Search Console (the easiest, if you already have GSC connected).Microsoft’s official walkthrough covers every verification method in detail: Add and Verify your site — Bing Webmaster Tools.Setup by site type
In Sight AI, open Integrations → Bing IndexNow, pick your workspace, and select the path that matches your site:- WordPress
- Webflow
- Custom / All other sites
Upload it to your WordPress site root
wp-config.php and index.php — not inside /wp-content, /wp-admin, or any other subdirectory.Confirm it's reachable
https://yourdomain.com/<your-key>.txt in your browser. You should see the key as plain text — nothing else.Custom site setup
This section is the deep dive for any site that isn’t WordPress or Webflow. The goal is the same in every case: makehttps://yourdomain.com/<your-key>.txt return your key as plain text.
Step 1 — Generate the key in Sight AI
- Open Integrations → Bing IndexNow.
- Pick your workspace.
- Select All other sites.
- Confirm you’ve registered with Bing Webmaster Tools.
- Click Generate IndexNow key. Sight AI creates a 32-character key for you.
- Click Download key file. You’ll get a file like
aB3xZ9k7…q2P.txtwhose contents are just the 32-character key — nothing else.
Step 2 — Understand “site root”
“Site root” means the file is reachable directly under your domain — not under any path segment. Test against this rule:| URL | At root? |
|---|---|
https://example.com/abc123.txt | ✅ Yes |
https://example.com/abc123.txt/ (trailing slash) | ❌ No |
https://example.com/static/abc123.txt | ❌ No |
https://example.com/public/abc123.txt | ❌ No |
https://example.com/.well-known/abc123.txt | ❌ No |
https://example.com/blog/abc123.txt | ❌ No |
robots.txt or sitemap.xml from your site, you can serve the IndexNow key file the same way and at the same place.
Step 3 — Host the file (pick your platform)
Vercel / Next.js
Vercel / Next.js
public/ directory:public/ is served from the root, so after deploying it’ll be reachable at https://yourdomain.com/abc123…q2P.txt.Commit, push, wait for the deploy to finish, then click Verify in Sight AI.Netlify
Netlify
public/, dist/, build/, or _site/). Check Site settings → Build & deploy → Continuous deployment → Publish directory if you’re not sure.For a static site:_redirects:200 rewrite (not a 301) keeps the URL as yourdomain.com/... so Bing accepts it.Cloudflare Pages
Cloudflare Pages
public/, dist/, or the project root for fully static sites). Push and let Pages rebuild.To verify locally before deploying, run wrangler pages dev and hit http://localhost:8788/<key>.txt.GitHub Pages
GitHub Pages
- In your repository, drop the
<key>.txtfile at the root of the branch GitHub Pages serves from (usuallymainorgh-pages, in the directory configured under Settings → Pages). - Commit and push.
- Wait for the Pages build to finish (check the Actions tab).
- Verify by opening
https://your-username.github.io/<key>.txt(or your custom domain).
_. Your key won’t start with _, but if you also keep a .nojekyll file at the root, you’re guaranteed the file will be served as-is.Astro / Hugo / Jekyll / Eleventy / Gatsby
Astro / Hugo / Jekyll / Eleventy / Gatsby
| Generator | Drop the file in |
|---|---|
| Astro | public/ |
| Hugo | static/ |
| Jekyll | site root (any file with no front matter) |
| Eleventy | the directory listed under passthroughCopy (often public/ or root) |
| Gatsby | static/ |
| Next.js | public/ |
| SvelteKit | static/ |
| Nuxt | public/ |
Apache (cPanel / shared hosting / VPS)
Apache (cPanel / shared hosting / VPS)
Nginx
Nginx
<key>.txt to your site’s web root (whatever root points to in your server block).If your config has a SPA-style catch-all like try_files $uri $uri/ /index.html, that catch-all will swallow the .txt request and return your HTML page. Add an explicit location block above the catch-all so the key file is served as-is:sudo nginx -s reload) and verify.IIS (Windows hosting)
IIS (Windows hosting)
-
Copy
<key>.txtinto the site’s physical directory (the one mapped under Sites → your-site → Basic Settings → Physical path). -
In IIS Manager → MIME Types, confirm
.txtis mapped totext/plain(it is by default). -
If your
web.configrewrites everything to a single handler, add a precondition above the rewrite: - Verify in your browser, then in Sight AI.
Amazon S3 + CloudFront
Amazon S3 + CloudFront
- Upload
<key>.txtto the S3 bucket that backs your CloudFront distribution. Place it at the bucket root, not inside any prefix. - Set the object’s Content-Type to
text/plain(the upload UI lets you set this; via CLI:--content-type text/plain). - Make sure the object is publicly readable, or that your bucket policy allows the CloudFront OAI/OAC to read it.
- If CloudFront has aggressive caching for
.txtfiles, invalidate the path:/<key>.txt. - Verify the URL responds, then click Verify in Sight AI.
Cloudflare Workers / Workers Sites
Cloudflare Workers / Workers Sites
[site] bucket in wrangler.toml (commonly public/).For a hand-written Worker, add an early route that returns the key as plain text:abc123…q2P with your actual key.Framer
Framer
Ghost
Ghost
<key>.txt in content/files/ (it will be served at https://yourdomain.com/content/files/<key>.txt, which is not the root) — so instead use a small Express/Nginx reverse-proxy rule above Ghost:Shopify
Shopify
- In Shopify admin, go to Online Store → Navigation → URL Redirects.
- Click Create URL redirect.
- Redirect from:
/<your-key>.txt - Redirect to: a public URL where the file lives (e.g., a Files entry — upload the
.txtthrough Settings → Files, copy the CDN URL, paste it here). - Save, then verify in Sight AI.
Squarespace
Squarespace
- Code Injection (Business plan and above): doesn’t help here because Code Injection runs inside HTML pages, not as a standalone file. Skip this option.
- URL redirects: Squarespace lets you create URL mappings under Settings → Advanced → URL Mappings. The syntax is
/<your-key>.txt -> https://your-cdn.example.com/<your-key>.txt 301. Host the file on any public URL (S3, GitHub Pages, etc.) and redirect to it.
Wix
Wix
Custom Express / Node / FastAPI / Django / Rails app
Custom Express / Node / FastAPI / Django / Rails app
Step 4 — Confirm the file is reachable
Before clicking Verify in Sight AI, sanity-check the file from your terminal:content-type doesn’t have to be text/plain — application/octet-stream and others work too — but the status must be 200 and the body must be exactly your key with no extras.
Run the same check on the www variant if your site uses it:
Step 5 — Verify in Sight AI
Back in Integrations → Bing IndexNow, click Verify connection. Sight AI will:- Fetch
https://yourdomain.com/<your-key>.txt - If that fails, try
https://www.yourdomain.com/<your-key>.txt - Compare the response body (after trimming whitespace) to your key
- On success: mark the integration as verified, immediately submit your existing sitemap URLs, and start pinging IndexNow on every future change
After verification
Once verified, IndexNow runs entirely in the background:- New sitemap URLs — picked up by Sight AI’s hourly sitemap check and submitted as a batch
- New articles — submitted the moment they sync to your CMS
- Updated content — re-submitted when the URL appears again in your sitemap with a new
lastmod - No rate limits to worry about — Sight AI batches up to 10,000 URLs per IndexNow request and Bing accepts them all
- No further action required from you — the key file just needs to stay reachable
Troubleshooting
When verification fails, Sight AI returns one of the messages below. Each section maps the message to its likely cause and the exact fix.”Key file not accessible — HTTP 404”
The most common failure. Bing tried to fetchhttps://yourdomain.com/<your-key>.txt and your server returned 404.
Causes and fixes:
- The file isn’t at the root. Check
curl -I https://yourdomain.com/<your-key>.txt— if you get 404, but a path likehttps://yourdomain.com/static/<your-key>.txtreturns 200, you uploaded it to the wrong directory. Move it to the root. - Your build process didn’t include the file. If you committed it to source but didn’t push, or your build folder doesn’t include the static files directory, the file won’t ship. Confirm the file is in the deployed output (open the URL in a browser tab — incognito to avoid caching).
- A SPA catch-all is swallowing the request. If you ship a single-page app, your server is probably returning
index.htmlfor every unknown path. The text response will look like HTML, not your key. See the Apache/Nginx/IIS sections above for how to add a precondition that lets.txtfiles through. - You’re testing the wrong host. Sight AI tries both
apexandwww. Check both manually.
”Key file content mismatch”
Sight AI fetched the file successfully but the body didn’t match your key. Causes and fixes:- The file has extra characters. Open the file in a hex-aware editor (
xxd <key>.txt | headon macOS/Linux). The bytes should be only[a-zA-Z0-9]— no spaces, no newlines, no UTF-8 BOM (ef bb bfat the start). - You uploaded the wrong file. If you regenerated the key in Sight AI and forgot to re-download, your hosted file is stale. Click Download key file again and re-upload.
- A CDN is rewriting the response. Some CDNs minify or wrap text responses. Disable rewrite rules for this path or set caching to bypass.
- Your server returned an error page with HTTP 200. Some hosts return a “soft 404” — a 200 status with an HTML error body. Check the actual body of the response (not just the status code).
”DNS resolution failed — the domain could not be found”
Sight AI couldn’t resolve the host at all. Causes and fixes:- The site host stored on your workspace doesn’t match a real domain. Open Site Settings → General and confirm the domain is correct.
- The domain just changed nameservers and DNS hasn’t propagated. Wait 15–30 minutes and try again.
- A typo:
example.convsexample.com.
”TLS/SSL certificate error”
Sight AI reached the server but couldn’t establish a secure connection. Causes and fixes:- Your SSL certificate is expired or doesn’t cover the host you’re verifying (e.g., the cert covers
example.combut you’re verifyingwww.example.com). - Your server is using an outdated cipher Sight AI doesn’t accept. Renew the cert from your hosting provider or run SSL Labs’ test to diagnose.
”Connection refused” / “Connection reset”
Your server actively rejected Sight AI’s request, usually because of a WAF rule or bot-detection layer. Causes and fixes:- Cloudflare Bot Fight Mode / WAF: allow-list Sight AI’s verifier in Cloudflare → Security → WAF by exempting requests for
*.txtpaths, or temporarily set Bot Fight Mode to off, verify, then re-enable. - Vercel firewall rules: add an allow rule for the
<key>.txtpath. - Server fail2ban / rate limiter: check your access logs for blocks on Sight AI’s verifier (User-Agent contains
Mozilla/5.0).
”Request timeout — unable to access the key file”
Your server took longer than 10 seconds to respond. Causes and fixes:- The server is overloaded or cold-starting. Wait a few seconds and retry.
- The file is being generated dynamically and that handler is slow. Serve it as a true static asset instead.
Verification succeeded but submissions are still failing
Verification passed but the Indexing Activity page shows submissions failing. Causes and fixes:- Your domain isn’t registered in Bing Webmaster Tools. This is the silent killer — Sight AI’s verification only checks that the key file is reachable; it doesn’t (and can’t) check whether you’ve also added the site to BWT. If you skipped the BWT prerequisite, Bing will accept the IndexNow request but discard it on its end. Go to bing.com/webmasters, add your site, and verify ownership using Microsoft’s guide.
- You moved or deleted the key file after verifying. Bing re-verifies ownership periodically. Re-upload the file to the root.
- The submitted URL host doesn’t match the verified host. If your sitemap returns
https://www.example.com/pagebut you verifiedexample.com(apex only), Bing rejects the submission. The fix is in the sitemap, not IndexNow — make your sitemap consistently use the same host you verified, or set the canonical host on your site so both work. - The page returns a non-2xx status. Bing’s crawler will follow the IndexNow ping but won’t index a URL that returns 4xx or 5xx. Check that the page actually loads.
How to ask for help
For anything inside Bing Webmaster Tools (creating the account, verifying ownership, settings inside BWT, indexing decisions Bing makes about your URLs), Sight AI can’t see what’s happening on Microsoft’s side — those go to Microsoft directly: For anything on the Sight AI side (verification fails, key file logic, submission status, sitemap-host mismatch, our integration UI), emailsupport@trysight.ai with:
- The exact error text from the verification panel
- The output of
curl -i https://yourdomain.com/<your-key>.txt - The output of
curl -i https://www.yourdomain.com/<your-key>.txt - A screenshot of the Integrations → Bing IndexNow page
- Confirmation that the domain shows as verified inside Bing Webmaster Tools
Key reference
For anyone bringing their own key (under Use my own key in the Sight AI UI), it must conform to the IndexNow spec:| Rule | Allowed |
|---|---|
| Length | 8 to 128 characters |
| Allowed characters | a-z, A-Z, 0-9, - (hyphen) |
| Not allowed | underscores, dots, slashes, spaces, any other punctuation |
| File name | exactly <key>.txt (case-sensitive — keep the .txt lowercase) |
| File contents | exactly the key, no whitespace, no newline, no BOM |
| File location | site root only |
Disconnect or regenerate
You can manage the integration at any time from Integrations → Bing IndexNow:- Regenerate key — issues a new key and clears the verified flag. You’ll need to re-upload a new file and re-verify. Use this if your old key was leaked or you want to rotate it.
- Use my own key — replace the auto-generated key with one you brought from elsewhere (e.g., one already used with another tool that submits to IndexNow).
- Disconnect — removes the IndexNow key for the workspace, stops automatic submissions, and clears the verified flag. The file on your server is harmless to leave behind, but you can also delete it.
Next steps
- Set up Google Search Console — for Google indexing (IndexNow doesn’t cover Google)
- Monitor your indexing activity — see every IndexNow submission, status, and error
- Learn how Sight AI handles indexing end-to-end
- Enable Autopilot — let Sight AI generate, publish, and submit articles for you on a schedule