Automatic URL Submission
Single request batching — multiple entity saves in one admin action fire one batched POST, not one per entity
Instantly notify Bing, Yandex, Seznam, Naver and Yep whenever a product, category, or CMS page changes — via the open IndexNow protocol, with one plug-and-play Magento 2 module.
Key Features:
Additional Services
Built-in from day one. No add-ons, no upsell, no licence keys to renew.
Single request batching — multiple entity saves in one admin action fire one batched POST, not one per entity
Scope-aware — configure one key per website or store view
/panth_indexnow/key — IndexNow's required verification URL, served as plain text from the admin-configured key
Disabled by default — must be explicitly enabled in admin so a fresh install doesn't start submitting URLs until you're ready
15-second timeout — won't hang the admin request if IndexNow is slow
Panth IndexNow is an instant-indexing submission extension for Magento 2 and Adobe Commerce that auto-pings Bing, Yandex, Seznam, Naver, and Yep on every catalog change.
The IndexNow protocol lets search engines pick up your URL changes within minutes instead of waiting for the next crawl. This module hooks every product, category, and CMS-page save observer and submits the canonical URL automatically — respecting custom URL rewrites, configured suffix, and per-store host — so admins never have to click "submit URL" in Bing Webmaster Tools after every edit, and developers never have to wire a cron job or queue topic.
Submissions batch by request (so editing 50 SKUs in one admin action fires one POST, not 50) and flush at the end of the request via register_shutdown_function, which keeps the save button responsive. Per-store API keys, a built-in verification endpoint at /panth_indexnow/key served as plain text, and timing-safe key comparison cover the IndexNow spec requirements without manual file uploads.
One key file is served per store from admin config, so multi-store catalogs work out of the box, and a default key configured at Default Config scope is inherited automatically by every store view that doesn't override it. The endpoint auto-404s when the feature flag is off, so it can't be abused as a configuration probe.
IndexNow is an open protocol co-created by Microsoft and Yandex that lets websites notify search engines the moment their content changes — rather than waiting for the next crawl. A website POSTs a list of changed URLs to a shared endpoint, and every participating search engine receives the notification simultaneously.
Key benefits for eCommerce stores:
api.indexnow.org fanouts to Bing, Yandex, Seznam, Naver and Yep in a single requestkeyLocation URL on your site proves ownership, so only you can submit URLs for your domainThe module handles the entire flow automatically — key hosting, URL collection, batching, submission, and error logging.
Automatic IndexNow submission for Magento 2 product, category, and CMS-page changes — no cron, no queue.
register_shutdown_function keeps observers off the critical path/panth_indexnow/key verification endpoint with timing-safe comparisonregister_shutdown_function — observer stays out of the critical path, merchant's save button returns instantlyhost, key, and keyLocation/panth_indexnow/key — IndexNow's required verification URL, served as plain text from the admin-configured key?key=<value> query param — lets crawlers pre-validate with timing-safe comparison; mismatches return 404 so the endpoint can't be abused as an arbitrary text echo servicepanth_indexnow as its route's frontName so the module never shares a route registration with other modules (no controller resolution races)Panth_IndexNow::config) — only roles with the permission can see / save the settingsvar/log/system.log for post-mortemIndexNow has a defined list of participating search engines. Submission via api.indexnow.org is fanned out to all of them:
| Search Engine | IndexNow Support |
|---|---|
| Bing | Yes |
| Yandex | Yes |
| Seznam | Yes |
| Naver | Yes |
| Yep | Yes |
| DuckDuckGo | Indirect (uses Bing's index) |
| No — Google does not participate in IndexNow | |
| Baidu | No |
Note on Google: Google has its own crawl schedule and doesn't accept IndexNow submissions. To speed up Google indexing, pair this module with an XML sitemap (e.g.
mage2kishan/module-xml-sitemap) and use Google Search Console. This module is for Bing / Yandex / Seznam / Naver / Yep — the search engines that actually honor IndexNow.
The module is deliberately small (three classes — an observer, a submitter, and a controller) and leans on Magento's native event system rather than inventing a scheduler:
┌────────────────────┐ save_after event ┌─────────────────────┐
│ Admin saves a │ ─────────────────────▶ │ EntityChangeObserver│
│ product / category │ │ │
│ / CMS page │ │ - resolves URL │
└────────────────────┘ │ - collects in batch │
│ - registers flush │
└──────────┬──────────┘
│
│ PHP shutdown
▼
┌─────────────────────┐
│ Submitter │
│ │
│ POST api.indexnow. │
│ org/IndexNow │
│ │
│ { │
│ host, key, │
│ keyLocation, │
│ urlList[] │
│ } │
└──────────┬──────────┘
│
▼
Bing, Yandex, Seznam,
Naver, Yep
Design decisions:
register_shutdown_function. A merchant saving 5 product edits in one admin action gets 1 POST, not 5.| Event | Observer Fires | URL Submitted |
|---|---|---|
catalog_product_save_after |
Product URL via $product->getProductUrl() (respects store rewrites) |
|
catalog_category_save_after |
Category URL via $category->getUrl() |
|
cms_page_save_after |
CMS page URL via \Magento\Cms\Helper\Page::getPageUrl() inside store emulation (respects URL rewrites + suffix) |
|
catalog_product_delete_after |
Not subscribed — IndexNow has no "remove" semantic; search engines detect 404s via normal re-crawl | |
catalog_category_delete_after |
Not subscribed — same reason | |
cms_page_delete_after |
Not subscribed — same reason | |
| Catalog rule save | Not subscribed (product URLs don't change from a rule save) | |
| Stock qty change | Not subscribed |
IndexNow requires the domain being submitted to serve the API key as a plain-text file at a declared URL. The module serves this automatically at:
https://yourstore.com/panth_indexnow/key
Accepted URL forms:
| URL | Behavior |
|---|---|
/panth_indexnow/key |
Returns the configured key as text/plain (HTTP 200) |
/panth_indexnow/key?key=<correct> |
Returns the key when the query matches (timing-safe compare) |
/panth_indexnow/key?key=<wrong> |
Returns 404 (prevents use as arbitrary text echo service) |
/panth_indexnow/key when IndexNow disabled |
Returns 404 |
/panth_indexnow/key when API key empty |
Returns 404 |
The key comparison is timing-safe via hash_equals — the endpoint resists timing-attack key discovery.
The module is fully scope-aware:
Each submission uses the correct key + host + keyLocation for the store the entity belongs to. Saving a product assigned to Store A and a CMS page assigned to Store B in one admin action triggers two POSTs — one per store — each with that store's own key.
Hyva store → POST {host: hyva.test, key: hyva-key-..., keyLocation: https://hyva.test/panth_indexnow/key}
Luma store → POST {host: luma.test, key: luma-key-..., keyLocation: https://luma.test/panth_indexnow/key}
| Issue | Cause | Resolution |
|---|---|---|
| Nothing gets submitted after saving | Module not enabled at store scope | Enable in admin at the specific store view (not just default) |
/panth_indexnow/key returns 404 |
Feature disabled or key empty | Enable + set API key + flush cache |
| IndexNow API returns 422 | Your site's host isn't publicly reachable | Expected on dev/staging (.test, .local). Will work on production domains. |
| IndexNow API returns 403 | Key file doesn't match submitted key | Verify /panth_indexnow/key returns the same value as the admin API Key field |
| Submissions happen but search results don't update | Google doesn't honor IndexNow | Use XML sitemap + Search Console for Google. IndexNow covers Bing / Yandex only. |
| Batch size > 10,000 URLs | Observer batches in chunks of 10K automatically | No action needed — the spec maximum is handled by array_chunk |
| Admin role doesn't see the config section | ACL resource not granted | System → Permissions → User Roles → edit the role → grant Panth Extensions → IndexNow |
| Log says "unexpected HTTP status: 0" | Curl failure (timeout, DNS, firewall) | Check that api.indexnow.org is reachable from your Magento server |
| Requirement | Versions Supported |
|---|---|
| Magento Open Source | 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8 |
| Adobe Commerce | 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8 |
| Adobe Commerce Cloud | 2.4.4 — 2.4.8 |
| PHP | 8.1.x, 8.2.x, 8.3.x, 8.4.x |
| MySQL | 8.0+ |
| MariaDB | 10.4+ |
| Hyva Theme | 1.0+ (native support) |
| Luma Theme | Native support |
| Required Dependency | mage2kishan/module-core ^1.0 |
composer require mage2kishan/module-index-now
bin/magento module:enable Panth_Core Panth_IndexNow
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
app/code/Panth/IndexNow/ in your Magento installationPanth_Core is installed (required dependency)bin/magento module:enablebin/magento module:status Panth_IndexNow
# Expected output: Module is enabled
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6) — or invent any 8+ character hex string; IndexNow generates new keys per-siteNavigate to Admin → Stores → Configuration → Panth Extensions → IndexNow to configure the module.
| Setting | Default | Scope | Description |
|---|---|---|---|
| Enable IndexNow | No | Store View | Master toggle. When on, product / category / CMS page saves submit the changed URL to IndexNow. |
| API Key | (empty) | Store View | A UUID-style key (e.g. a1b2c3d4e5f6…). The key is served at /panth_indexnow/key for verification. Must be at least 8 hex characters. |
Both settings are scope-aware — configure one key globally or set different keys per store view if you manage multiple brand domains from one Magento install.
Panth IndexNow is licensed under a proprietary license — see LICENSE.txt. One license per Magento installation.
| Module Category | SEO & Indexing |
|---|---|
| Best For | All Sizes |
No. Google does not participate in IndexNow and has stated they maintain their own crawl schedule. For Google indexing, use a proper XML sitemap and Google Search Console. This module is specifically for the IndexNow ecosystem (Bing, Yandex, Seznam, Naver, Yep).
No — that's the point of IndexNow. One key, submitted to api.indexnow.org, fans out to every participating engine. Generate the key once at Bing IndexNow or Yandex IndexNow and paste it into Magento.
https://yourstore.com/panth_indexnow/key — IndexNow crawlers hit this URL to verify domain ownership before trusting submitted URLs.
The HTTP call times out after 15 seconds, the failure is logged to var/log/system.log, and the save that triggered it completes normally. No admin-facing error, no retry queue — the next save attempts a fresh submission.
No. The observer only enqueues URLs during save and fires the actual POST in register_shutdown_function — after Magento has already sent the response to the admin. The merchant's Save button returns at normal speed.
Yes. IndexNow operates at the backend event layer (catalog_product_save_after, etc.) — it's theme-agnostic. Runs identically on Hyva, Luma, or any Magento 2 theme.
IndexNow is per-URL, not per-sitemap — Bing already polls your sitemap separately. If you want to force a re-crawl of a specific URL (not triggered by a save), you'd need a custom CLI command; this module doesn't ship one in v1.0.
Yes. mage2kishan/module-core is a required dependency and is pulled in automatically by Composer. Core provides the admin tab layout and common utilities.
Yes. Every configuration setting respects Magento's standard scope hierarchy (default → website → store view). Set different keys per store view, per website, or one default key globally — whichever fits your setup.
Not submitted. IndexNow is designed for new or changed content. Deletions are detected by search engines through normal re-crawl when they hit a 404 on the next visit to the URL.
Panth Malware Scanner is built specifically for Magento 2 filesystems — it understands the directory layout, knows which folders are writable from the frontend, and ships signatures tuned for Magento-targeted threats (Magecart skimmers, PolyShell webshells, admin-layout injection). Traditional AV tools scan everything with generic signatures and produce noise.
No. All price-delta logic continues to flow through Magento's standard priceBox and price-option JS components. This module only replaces the visual rendering.
Yes. When enabled, Panth Footer takes over the footer.container block and renders its own configurable footer. You can disable it any time to restore the default footer.
No. Panth Core is completely free and will remain free forever. It is the foundation library that other (paid) Panth extensions depend on.
Yes. The module ships Hyva-native templates using Alpine.js and Tailwind. No jQuery required.
Yes. The module ships with two purpose-built templates — Alpine.js + Tailwind for Hyva and vanilla JS for Luma — and auto-switches based on your active storefront theme.
Yes. Create as many sliders as you want in the admin and place each one via its own widget or layout block. Each slider maintains independent configuration and slides.
Yes, guests can subscribe with their email address. You can optionally require login via admin config.
No. Google does not participate in IndexNow and has stated they maintain their own crawl schedule. For Google indexing, use a proper XML sitemap and Google Search Console. This module is specifically for the IndexNow ecosystem (Bing, Yandex, Seznam, Naver, Yep).
Unlimited. Each form has a unique identifier and its own submissions scope.
Talk to Kishan directly — written quote, scope and timeline within 24 hours. No sales call.
IndexNow Submission for Magento 2