MeshWorld India LogoMeshWorld.
SEOIndexNowWeb-DevelopmentSearch-Indexing18 min read

How IndexNow Works: The Technical Protocol Workflow

Vishnu
By Vishnu
How IndexNow Works: The Technical Protocol Workflow

Table of Contents

  1. The Complete Workflow Overview
  2. Website Changes: What Triggers IndexNow?
  3. The Ping Request: GET vs. POST
  4. API Request Structure Deep Dive
  5. Verification Key: Generation and Management
  6. Key File: Placement and Requirements
  7. Search Engine Receiving Notifications
  8. The Crawling Process After Notification
  9. Indexing Process: From Crawl to Search Results
  10. Ranking vs. Indexing: The Critical Distinction
  11. Cache Updates
  12. Crawl Budget Implications

The Complete Workflow Overview

Understanding IndexNow means grasping the entire lifecycle of a URL change notification—from the moment content changes on your site to the moment it appears in search results.

The Six-Step IndexNow Process

plaintext
┌─────────────────────────────────────────────────────────────────────────┐
│                    INDEXNOW COMPLETE WORKFLOW                            │
└─────────────────────────────────────────────────────────────────────────┘

STEP 1              STEP 2              STEP 3              STEP 4
┌─────────┐        ┌─────────┐        ┌─────────┐        ┌─────────┐
│ Content │        │ Generate│        │ Host Key│        │ Send API│
│ Changes │───────▶│ API Key │───────▶│ File    │───────▶│ Request │
│ on Site │        │ (once)  │        │ on Root │        │ (Ping)  │
└─────────┘        └─────────┘        └─────────┘        └─────────┘

STEP 5              STEP 6              STEP 7              │
┌─────────┐        ┌─────────┐        ┌─────────┐       │
│ Search  │        │ URL     │        │ Crawler │◀───────┘
│ Engine  │───────▶│ Shared  │───────▶│ Fetches │
│ Validates│        │ Across  │        │ Page    │
│ Key     │        │ Engines │        │ Content │
└─────────┘        └─────────┘        └─────────┘

STEP 8              STEP 9                  │
┌─────────┐        ┌─────────┐              │
│ Content │        │ Search  │◀─────────────┘
│ Indexed │───────▶│ Results │
│ & Ranked│        │ Updated │
└─────────┘        └─────────┘

Client-Server Verification Key Handshake Fig 2.1: The validation flowchart shows how search engines verify domain ownership. When a ping is received, the search engine fetches a key file hosted on the website root directory to authenticate the API request.


Website Changes: What Triggers IndexNow?

IndexNow should be triggered by three types of content changes. Knowing what qualifies is critical for proper implementation.

Type 1: URL Added (New Content)

When a new page is published, submit it to IndexNow.

Examples of “new content”:

  • New blog post published
  • New product added to ecommerce catalog
  • New landing page created for marketing campaign
  • New documentation page added
  • New user-generated content (forum post, review page)
  • New category or tag page created

What doesn’t qualify:

  • Pagination pages (page 2, page 3 of a listing)
  • Filter/sort result pages
  • Search result pages
  • Session-based or personalized pages

Type 2: URL Updated (Modified Content)

When an existing page’s content changes significantly, submit it.

What counts as “significant” update:

  • Price changes on product pages
  • Availability status changes (in stock / out of stock)
  • Content rewritten or substantially expanded (more than 20% change)
  • Metadata changes (title, description, structured data)
  • Media additions (new images, videos)
  • Correction of factual errors
  • Addition of new sections or features

What doesn’t count as significant:

  • CSS or styling changes
  • Minor typo fixes (unless they affect meaning)
  • Navigation menu updates
  • Footer changes
  • Analytics tag additions
  • Layout adjustments without content changes
  • Comment additions (unless comments are the primary content)

Expert Tip: Only submit URLs when the actual content a user sees has changed. Search engines track submission accuracy. Sites that abuse IndexNow by submitting unchanged URLs may see reduced crawl priority.

Type 3: URL Deleted (Removed Content)

When a page is permanently removed, IndexNow can tell search engines to remove it from their index.

Examples:

  • Product discontinued and page removed
  • Blog post deleted
  • Outdated documentation removed
  • Expired event pages removed
  • User account deleted (profile pages removed)
  • Content merged into another page

HTTP Status Code Requirements:

Status CodeMeaningIndexNow Action
410 GonePermanently removedPreferred—search engines remove from index quickly
404 Not FoundTemporarily or permanently unavailableSearch engines may retry before removing
301 Moved PermanentlyContent moved to new URLSubmit new URL; old URL will be updated

The Ping Request: GET vs. POST

The “ping” is the HTTP request sent to the IndexNow API. There are two methods for different scenarios.

Method 1: Simple GET Request (Single URL)

For a single URL change, use a GET request:

plaintext
GET https://api.indexnow.org/indexnow?url=https://example.com/new-page&key=YOUR_API_KEY

Parameters:

  • url: The full URL of the changed page (must be URL-encoded)
  • key: Your unique API key

When to use GET:

  • Testing the API
  • Single URL submissions
  • Simple scripts or browser-based testing
  • Quick manual submissions

Limitations:

  • Only 1 URL per request
  • Key is visible in URL (less secure)
  • URL length limitations (browsers typically limit URLs to ~2,000 characters)

Method 2: POST Request (Multiple URLs) — RECOMMENDED

For batch submissions (up to 10,000 URLs), use POST:

http
POST https://api.indexnow.org/indexnow HTTP/1.1
Content-Type: application/json; charset=utf-8

{
  "host": "example.com",
  "key": "YOUR_API_KEY",
  "keyLocation": "https://example.com/YOUR_API_KEY.txt",
  "urlList": [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3"
  ]
}

Why POST is preferred:

  • Supports up to 10,000 URLs per request
  • More secure (key in request body, not URL)
  • Better for automation and batch processing
  • Required for keyLocation verification
  • Proper JSON structuring

When to use POST:

  • Production implementations
  • Batch submissions
  • Automated workflows
  • Any serious setup

API Request Structure Deep Dive

Let’s break down every component of the POST request.

Endpoint

plaintext
https://api.indexnow.org/indexnow

You can also submit directly to individual search engine endpoints:

Search EngineEndpoint
Central (recommended)https://api.indexnow.org/indexnow
Binghttps://www.bing.com/indexnow
Yandexhttps://yandex.com/indexnow
Naverhttps://searchadvisor.naver.com/indexnow
Seznamhttps://search.seznam.cz/indexnow
Yephttps://yep.com/indexnow

Critical Rule: Submitting to ANY ONE of these endpoints automatically shares the URLs with ALL participating search engines. You never need to submit to more than one.

Request Headers

HeaderValueRequiredPurpose
Content-Typeapplication/json; charset=utf-8YesTells the API you’re sending JSON
Acceptapplication/jsonRecommendedIndicates you expect JSON response

Request Body (JSON Fields)

FieldTypeRequiredDescriptionExample
hoststringYes*The fully qualified domain name (no protocol)"example.com"
keystringYesYour unique API key (minimum 8 chars, recommended 32+ hex)"8f7d6e5c4b3a2918f7d6e5c4b3a2918f"
keyLocationstringYes*Full HTTPS URL where the key file is hosted"https://example.com/8f7d6e5c4b3a2918f7d6e5c4b3a2918f.txt"
urlListarrayYes**Array of up to 10,000 absolute URLs["https://example.com/page1"]

*Required for POST requests
**Either urlList (POST) or url (GET) is required

URL Requirements

  • Must be absolute URLs (including protocol: https://)
  • Must use the same host as specified in the host field
  • Must be URL-encoded if containing special characters
  • Maximum 10,000 URLs per request
  • Each URL maximum 2,048 characters
  • Must use HTTPS (HTTP URLs are rejected)

Example: Minimal Valid Request

http
POST https://api.indexnow.org/indexnow HTTP/1.1
Content-Type: application/json; charset=utf-8

{
  "host": "example.com",
  "key": "abc123def456789ghi012jkl345mno67",
  "keyLocation": "https://example.com/abc123def456789ghi012jkl345mno67.txt",
  "urlList": ["https://example.com/new-blog-post"]
}

Example: Batch Submission

http
POST https://api.indexnow.org/indexnow HTTP/1.1
Content-Type: application/json; charset=utf-8

{
  "host": "example.com",
  "key": "abc123def456789ghi012jkl345mno67",
  "keyLocation": "https://example.com/abc123def456789ghi012jkl345mno67.txt",
  "urlList": [
    "https://example.com/products/new-widget",
    "https://example.com/blog/2026-guide",
    "https://example.com/about-updated",
    "https://example.com/pricing-new",
    "https://example.com/docs/api-v3"
  ]
}

Verification Key: Generation and Management

The verification key proves you own the domain you’re submitting URLs for. Without it, anyone could submit URLs for any site.

Key Generation

Generate a key using any cryptographically secure random generator. The key should be:

  • Minimum: 8 characters
  • Recommended: 32–64 hexadecimal characters (128–256 bits of entropy)
  • Format: Alphanumeric characters, hyphens, and underscores
  • Security: Cryptographically random (not predictable)

Recommended method using OpenSSL:

bash
openssl rand -hex 32
# Output: 8f7d6e5c4b3a2918f7d6e5c4b3a2918f7d6e5c4b3a2918f7d6e5c4b3a2918f7d

Python:

python
import secrets
key = secrets.token_hex(32)
print(key)
# Output: 8f7d6e5c4b3a2918f7d6e5c4b3a2918f7d6e5c4b3a2918f7d6e5c4b3a2918f7d

Node.js:

javascript
const crypto = require('crypto');
const key = crypto.randomBytes(32).toString('hex');
console.log(key);

PHP:

php
$key = bin2hex(random_bytes(32));
echo $key;

Go:

go
package main

import (
    "crypto/rand"
    "encoding/hex"
    "fmt"
)

func main() {
    bytes := make([]byte, 32)
    rand.Read(bytes)
    key := hex.EncodeToString(bytes)
    fmt.Println(key)
}

Key Management Best Practices

PracticeWhy It MattersImplementation
Use a secrets managerPrevents key exposure in codeAWS Secrets Manager, Azure Key Vault, HashiCorp Vault
Separate keys per domainLimits blast radius if one key is compromisedGenerate unique key for each domain
Rotate annuallyReduces risk from long-term key exposureSchedule rotation in calendar
Never commit to version controlPrevents accidental public exposureAdd to .gitignore, use environment variables
Limit accessReduces insider threatOnly necessary personnel should know the key
Monitor usageDetect unauthorized submissionsLog all submissions with timestamps

Key File: Placement and Requirements

The key file is how search engines verify domain ownership. It must be publicly accessible so search engines can fetch it and compare it to the key in your API requests.

File Requirements

RequirementSpecificationWhy It Matters
LocationRoot of domain (e.g., https://example.com/key.txt)Proves domain ownership
ProtocolMust be HTTPSSecurity and integrity
ContentOnly the key string (no HTML, no whitespace)Clean comparison
Content-Typetext/plainCorrect MIME type
Status CodeHTTP 200 OKMust be accessible
FilenameMust match the key exactlyVerification mechanism

Standard File Placement

plaintext
URL: https://example.com/8f7d6e5c4b3a2918f7d6e5c4b3a2918f.txt
Content: 8f7d6e5c4b3a2918f7d6e5c4b3a2918f

Platform-Specific Placement

PlatformFile LocationNotes
WordPress/public_html/{key}.txt or /var/www/html/{key}.txtRoot of web server document root
ShopifyUpload via Settings > Files, then redirectMust be accessible at root URL
WixUpload via Site Tools > File ManagerPlace in root directory
Next.jspublic/{key}.txtAutomatically served from root
Nuxt.jsstatic/{key}.txt or public/{key}.txtAutomatically served from root
Laravelpublic/{key}.txtPublic directory
Djangostatic/{key}.txt with URL routingConfigure to serve at root
Static Site (Netlify/Vercel)Root of build outputInclude in deployment
Cloudflare PagesRoot of repositoryInclude in deployment

Common Mistakes with Key Files

MistakeWhy It FailsSolution
HTML wrapperSearch engines see <html>key</html> instead of just keyServe raw text file
BOM (Byte Order Mark)Invisible character at start of fileSave as UTF-8 without BOM
Trailing newlineFile contains key\n instead of keyRemove trailing whitespace
Wrong locationFile in /assets/ instead of rootMust be at domain root
HTTP instead of HTTPSSearch engines reject insecure URLsForce HTTPS
File permissionsServer returns 403 ForbiddenSet permissions to 644
CDN cachingOld key cached after rotationPurge cache or use versioned filename

Verification Checklist

Before submitting URLs, verify your key file with these commands:

bash
# Test 1: Check accessibility
curl -I https://example.com/YOUR_KEY.txt
# Expected: HTTP/2 200, Content-Type: text/plain

# Test 2: Check content
curl https://example.com/YOUR_KEY.txt
# Expected: YOUR_KEY (exactly, no extra characters)

# Test 3: Check from external network
# Use a VPN or mobile hotspot to verify accessibility
# Some firewalls block certain IP ranges

Search Engine Receiving Notifications

When a search engine receives an IndexNow request, it runs a validation process:

Validation Flowchart

plaintext
┌─────────────────────────────────────────┐
│  IndexNow API Receives Request         │
└─────────────────┬───────────────────────┘


┌─────────────────────────────────────────┐
│  Step 1: Validate JSON Format          │
│  • Is it valid JSON?                   │
│  • Are required fields present?        │
└─────────────────┬───────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
   ┌─────────┐        ┌─────────┐
   │  Valid  │        │ Invalid │
   └────┬────┘        └────┬────┘
        │                  │
        ▼                  ▼
   Continue          Return 400
   to Step 2          Bad Request

┌─────────────────────────────────────────┐
│  Step 2: Validate Host Format          │
│  • Is host a valid domain?             │
│  • No protocol, no path, no port       │
└─────────────────┬───────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
   ┌─────────┐        ┌─────────┐
   │  Valid  │        │ Invalid │
   └────┬────┘        └────┬────┘
        │                  │
        ▼                  ▼
   Continue          Return 400
   to Step 3          Bad Request

┌─────────────────────────────────────────┐
│  Step 3: Fetch keyLocation             │
│  • Is keyLocation accessible?           │
│  • Does it return HTTP 200?            │
│  • Is Content-Type text/plain?         │
└─────────────────┬───────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
   ┌─────────┐        ┌─────────┐
   │ Success │        │  Fail   │
   └────┬────┘        └────┬────┘
        │                  │
        ▼                  ▼
   Continue          Return 403
   to Step 4          Forbidden

┌─────────────────────────────────────────┐
│  Step 4: Validate Key Match            │
│  • Does file content match request key?│
└─────────────────┬───────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
   ┌─────────┐        ┌─────────┐
   │  Match  │        │ No Match│
   └────┬────┘        └────┬────┘
        │                  │
        ▼                  ▼
   Continue          Return 403
   to Step 5          Forbidden

┌─────────────────────────────────────────┐
│  Step 5: Validate URLs                 │
│  • Are URLs valid HTTPS?               │
│  • Do URLs match the host domain?      │
│  • Are URLs properly formatted?        │
│  • Is urlList ≤ 10,000 items?        │
└─────────────────┬───────────────────────┘

        ┌─────────┴─────────┐
        ▼                   ▼
   ┌─────────┐        ┌─────────┐
   │  Valid  │        │ Invalid │
   └────┬────┘        └────┬────┘
        │                  │
        ▼                  ▼
   Return 200         Return 400
   OK                  Bad Request
   + Share URLs
   + Queue for Crawl

Response Codes

Status CodeMeaningAction Required
200 OKSuccess! URLs accepted and queuedNone—monitor for crawler visits
202 AcceptedSuccess (some engines return this)Same as 200
400 Bad RequestInvalid request formatCheck JSON structure, required fields
403 ForbiddenKey validation failedVerify key file is accessible and matches
422 Unprocessable EntityValid JSON but invalid dataCheck URL format, host matching
429 Too Many RequestsRate limit exceededImplement backoff and retry
500 Internal Server ErrorServer error on engine sideRetry with exponential backoff

What Happens After Validation

  1. Key Verification: The search engine fetches your keyLocation URL and verifies the key matches the request
  2. URL Validation: Each URL is checked for proper format and domain matching
  3. Acceptance: If valid, the search engine returns HTTP 200 OK
  4. Distribution: The URL list is shared with all other participating search engines
  5. Crawl Queue: URLs are added to the search engine’s priority crawl queue
  6. Crawling: Crawlers visit the URLs (typically within minutes to hours)
  7. Indexing: Content is processed and added/updated/removed from the index

The Crawling Process After Notification

Once a URL passes validation and enters the crawl queue, here’s what happens next:

Crawl Priority

IndexNow-submitted URLs get high priority in the crawl queue:

Priority LevelSourceTypical Crawl Delay
CriticalIndexNow notificationsMinutes to 1 hour
HighSitemap lastmod recent1–24 hours
MediumInternal links from high-authority pages1–7 days
LowExploratory crawl, old sitemap entries7–30 days

Crawler Actions

When a crawler visits an IndexNow-notified URL:

  1. Fetch: The crawler requests the HTML document (and critical resources)
  2. Parse: Extracts content, links, metadata, structured data, images
  3. Render: For JavaScript-heavy sites, the crawler may render the page
  4. Compare: Checks if content actually changed (for updates)
  5. Quality Assessment: Evaluates content quality, relevance, uniqueness
  6. Index Decision: Determines whether to index, update, or ignore
  7. Store: Updates the search index with new content
  8. Cache: Updates cached version for search results

Server Log Evidence

After submitting via IndexNow, you should see crawler visits in your server logs within hours. Here’s an example:

plaintext
# Example server log entries after IndexNow submission
203.0.113.1 - - [26/Jun/2026:14:32:01 +0000] "GET /new-blog-post HTTP/1.1" 200 4521 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
203.0.113.2 - - [26/Jun/2026:14:33:15 +0000] "GET /new-blog-post HTTP/1.1" 200 4521 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"

Indexing Process: From Crawl to Search Results

Crawling and indexing are distinct processes that often get confused:

ProcessDefinitionOutcomeTimeframe
CrawlingFetching and reading a web pageContent is retrieved and analyzedMinutes to hours
IndexingAdding the page to the search engine’s databasePage becomes eligible for search resultsHours to days
RankingDetermining position in search resultsPosition in SERPs for queriesOngoing

The Indexing Pipeline

plaintext
┌─────────┐    ┌──────────────┐    ┌─────────────────┐
│ Crawl   │───▶│ Content      │───▶│ Quality         │
│ Complete│    │ Analysis     │    │ Assessment      │
└─────────┘    └──────────────┘    └────────┬────────┘

                                   ┌────────┴────────┐
                                   ▼                 ▼
                            ┌──────────┐      ┌──────────┐
                            │ Pass     │      │ Fail     │
                            └────┬─────┘      └────┬─────┘
                                 │                 │
                                 ▼                 ▼
                          ┌──────────┐      ┌──────────┐
                          │ Add to   │      │ Skip or  │
                          │ Index    │      │ De-index │
                          └────┬─────┘      └──────────┘


                          ┌──────────┐
                          │ Ranking  │
                          │ Algorithm│
                          └────┬─────┘


                          ┌──────────┐
                          │ SERP     │
                          │ Position │
                          └──────────┘

Important: IndexNow accelerates crawling and discovery, but it doesn’t guarantee indexing or influence ranking. The search engine still evaluates content quality before adding it to the index.


Ranking vs. Indexing: The Critical Distinction

This is the most commonly misunderstood aspect of IndexNow. Let’s be clear:

IndexNow helps search engines DISCOVER and CRAWL your content faster. It does NOT directly improve your RANKINGS.

What IndexNow Actually Impacts

MetricImpactExplanation
Discovery Speed✅ Dramatically improvedURLs found in minutes instead of days
Crawl Efficiency✅ ImprovedOnly changed URLs are crawled
Indexing Speed✅ ImprovedFaster crawling leads to faster indexing
Ranking Position❌ No direct impactRankings depend on content quality, relevance, authority
Click-Through Rate⚠️ IndirectFresher snippets may improve CTR

The Indirect Ranking Benefits

While IndexNow doesn’t directly affect rankings, faster indexing creates indirect benefits:

  1. First-Mover Advantage: For trending topics, being indexed first means capturing traffic before competitors
  2. Freshness Signals: Some ranking algorithms favor fresh content for time-sensitive queries
  3. Accurate Information: Updated product information (prices, availability) improves conversion rates
  4. User Experience: Current information reduces bounce rates, which may indirectly influence rankings

Example Scenario:

plaintext
Query: "iPhone 16 Pro review"
Your site: Publishes review at 10:00 AM, submits via IndexNow at 10:01 AM
Competitor: Publishes review at 10:00 AM, relies on traditional crawling

Result: Your review is indexed by 10:30 AM and starts ranking.
Competitor's review is discovered at 2:00 PM and indexed by 6:00 PM.

You capture 8 hours of search traffic with minimal competition.
This isn't because IndexNow improved your ranking—it's because 
your content was available to rank while your competitor's wasn't.

Cache Updates

When a search engine crawls an IndexNow-submitted URL, it updates several cache layers:

Types of Cache Updates

Cache TypeWhat UpdatesTimeline
Search result snippetTitle, description, rich resultsHours
Page cacheCached version of the pageHours to days
Image indexNew or changed imagesHours to days
Structured data cacheRich snippets, knowledge panelsHours to days
Link graphNew outbound links discoveredDays

Crawl Budget Implications

IndexNow has big implications for crawl budget management.

Before IndexNow: The Waste Problem

plaintext
Daily Crawl Budget:        50,000 pages
Changed Pages Today:            500 pages
Unchanged Pages:           49,500 pages
Wasted Crawls:             49,500 (99% of budget!)

After IndexNow: Targeted Efficiency

plaintext
Daily Crawl Budget:        50,000 pages
IndexNow-submitted Pages:     500 pages
Additional Exploratory:    10,000 pages (search engine's choice)
Remaining Budget:          39,500 for deep discovery
Efficiency Gain:           Massive

The Promise of Future Crawl Reduction

Bing has stated that search engines may reduce exploratory crawling for sites that consistently use IndexNow accurately. This means:

  • Less server load
  • Lower bandwidth costs
  • Reduced hosting expenses
  • Better environmental sustainability

Official Statement from Bing: “By telling search engines whether a URL has been changed, website owners provide a clear signal helping search engines to prioritize crawl for these URLs, thereby limiting the need for exploratory crawl to test if the content has changed. In the future, search engines intend to limit crawling of websites adopting IndexNow.”


Key Takeaways

IndexNow workflow: Content changes → Generate key → Host key file → Send API request → Search engine validates → URLs shared across engines → Crawler visits → Content indexed
Three change types trigger submissions: New URLs, updated URLs, deleted URLs
POST requests are preferred for production (supports 10,000 URLs per batch)
GET requests work for single URLs and testing
Key file must be at domain root, accessible via HTTPS, containing only the key
One submission reaches ALL participating engines automatically
IndexNow accelerates discovery and crawling, not ranking
Proper implementation can reduce bot traffic by 20–40%
Search engines may reduce exploratory crawling for accurate IndexNow users


Previous: Part 1: What is IndexNow?
Next: Part 3: Why Use IndexNow?

Share_This Twitter / X
Vishnu
Written By

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Enjoyed this article?

Support MeshWorld and help us create more technical content