Skip to content
5.0 Upwork, 100+ reviews Adobe Certified since 2021 New: become your own Magento developer Learn more →
SEO Extensions

IndexNow Submission for Magento 2

Sends the URL of each product, category or CMS page you save in Magento 2 to Bing, Yandex, Seznam, Naver and Yep through IndexNow. Several saves in one admin action go out as a single request.

  • Free
  • Themes listed: Hyvä + Luma
Free $0.00, in stock
Check requirementsSee the versions and themes listed for this package. Details Ask about setupInclude the package name and your Magento and PHP versions. Ask
$0.00
In stock
SKU
panth-index-now
Links
composer require mage2kishan/module-index-now
SKU
panth-index-now
  • Package requirementsRead the source documentation
  • Developer profileView Upwork profile
  • Themes listedHyvä + Luma
  • PHP versions listed8.1, 8.2, 8.3, 8.4
  • Installation questionsDiscuss your store setup

What it does for your store

The main features, as listed in the module documentation.

  • Automatic URL Submission

    Single request batching, multiple entity saves in one admin action fire one batched POST, not one per entity

  • Per-Store API Keys

    Scope-aware, configure one key per website or store view

  • Built-in Key Verification Endpoint

    /panth_indexnow/key, IndexNow's required verification URL, served as plain text from the admin-configured key

  • Safe Defaults

    Disabled by default, must be explicitly enabled in admin so a fresh install doesn't start submitting URLs until you're ready

  • Defensive HTTP Client

    15-second timeout, won't hang the admin request if IndexNow is slow

Installation

Example commands from the Magento root. Follow the package instructions and your staging and deployment process.

  1. 1Check the releaseMatch Magento, PHP, theme and dependency requirements.
  2. 2Install on stagingReview Composer changes and follow the package instructions.
  3. 3Configure and verifyUse the documented settings and test the affected features.
magento-root
$ composer require mage2kishan/module-index-now
$ bin/magento setup:upgrade
$ bin/magento setup:di:compile
$ bin/magento setup:static-content:deploy -f
$ bin/magento cache:clean

Listed requirements

These are the details supplied in this listing. Confirm the selected release supports your Magento edition, PHP and storefront.

Magento versions listed2.4.6, 2.4.7, 2.4.8
PHP versions listed8.1, 8.2, 8.3, 8.4
Themes listedHyvä, Luma
Composer packagemage2kishan/module-index-now

Read package requirements and license

Documentation

Product details and setup guidance. Check the package repository for release-specific instructions.

Overview

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.

  • Stores with frequent catalog updates needing fast Bing / Yandex indexing
  • Multi-store Magento sites that need per-store-view IndexNow keys
  • Merchants who run flash sales or promotional URL changes

What you get

Automatic IndexNow submission for Magento 2 product, category, and CMS-page changes, no cron, no queue.

  • Auto-submits canonical URLs to Bing, Yandex, Seznam, Naver, Yep on save
  • Single batched POST per admin action even when 50 entities save at once
  • End-of-request flush via register_shutdown_function keeps observers off the critical path
  • Per-website or per-store-view API keys with default inheritance
  • Built-in /panth_indexnow/key verification endpoint with timing-safe comparison
  • Auto-404 when disabled so the endpoint can't be abused as a probe

Magento 2 IndexNow

Notifies search engines that support the IndexNow protocol (Bing, Yandex and the other participating engines) as soon as a product, category or CMS page is saved or deleted in the admin, so the changed URL is picked up without waiting for a crawl. The module submits the URLs to the shared IndexNow endpoint and serves the verification key file the protocol requires.

It is for store owners who want content changes reflected quickly in IndexNow-participating engines. Google does not use IndexNow; nothing is submitted there. The module has no storefront output, so it works with any theme.

Product page: kishansavaliya.com/magento-2-index-now.html

Features

  • Submits the URL of a product, category or CMS page to IndexNow when it is saved or deleted in the admin.
  • Changed URLs are stored in the panth_index_now_queue table and submitted either at the end of the save request (default, 4 second timeout) or by a cron job every minute, one request per store host and key, in batches of up to 10,000 URLs. URLs that could not be submitted are retried by cron up to 5 times.
  • Serves the IndexNow key at /<key>.txt and at /panth_indexnow/key on the storefront (plain text, not cached), with a 404 when the module is disabled or the key is missing or invalid.
  • API key and enable switch per store view, so each store view can use its own key.
  • Failures are logged to Magento's log files and never interrupt the save.
  • The key file response always carries X-Robots-Tag: noindex, nofollow, even when another extension rewrites robots headers on storefront responses.
  • One database table (panth_index_now_queue) and one cron job (panth_index_now_flush); no console commands.

Usage

  • Saving a product, a category or a CMS page in the admin queues its storefront URL for the store view the entity was saved in. When it is saved at the default ("All Store Views") scope, the URL of every active store view the entity belongs to is queued. Only store views with IndexNow enabled are used.
  • Deleting a product, a category or a CMS page queues its storefront URL for every active store view it belonged to, with the action delete. The URL is resolved in a model_delete_before observer, which runs before Magento removes the URL rewrites, so the SEO-friendly URL is submitted. Deleted URLs are submitted in the same batch as saved ones, as the IndexNow protocol expects; the search engine then finds the 404 and drops the page.
  • Products that are not visible individually and root categories are skipped.
  • Queued URLs are stored in panth_index_now_queue (one row per store view and URL; queuing the same URL again updates the row). In the default mode the rows queued by a request are submitted when that request ends; in cron mode the panth_index_now_flush job (every minute, default cron group) submits them. Submitted rows are deleted. When a submission fails, for example because the key is missing or the endpoint is unreachable, the row's attempt counter is increased and the cron job retries it (in the default mode only rows older than 2 minutes, so it does not race the request); after 5 failed attempts the row is removed and a warning is logged.
  • The queued URLs are posted to the IndexNow endpoint at api.indexnow.org/IndexNow as JSON with the store host, the key, the key location and the URL list, one request per host and key. Only URLs on the store's own host and under its base URL are sent. IndexNow shares submissions with all participating engines, so one submission is enough.
  • The key location sent is <store base URL>/<key>.txt, so every URL of the store falls under it as the protocol requires. The key file is also served at /panth_indexnow/key, which answers /panth_indexnow/key?key=<key> (a .txt suffix on the key is accepted) and returns the key only when it matches the configured one.
  • Results are written to Magento's log: successful submissions as info entries, unexpected HTTP responses and connection errors as warnings or errors. Submissions made at the end of a save request use a 4 second request timeout and a 2 second connect timeout, so a slow endpoint delays the admin save by at most about 4 seconds; use cron mode to keep the save request free of any outbound call. Cron submissions use 15 and 5 seconds.
  • The router that maps /<key>.txt hands the request to the standard router after the first match, so the key file is served instead of failing with a router loop.
  • The key file response sets X-Robots-Tag: noindex, nofollow. A beforeSendResponse plugin on Magento\Framework\App\Response\Http (sort order 10000, frontend area) sets the header again for requests routed to panth_indexnow/key, after other plugins such as the Panth Robots SEO header plugin have run, so the key file keeps its own directive instead of the store-wide robots defaults.

Changelog

See CHANGELOG.md.

Compatibility

Magento Open Source / Adobe Commerce 2.4.4 to 2.4.9
PHP 8.1, 8.2, 8.3, 8.4
Themes Any (no storefront output)

The Composer package requires magento/framework ^103.0, magento/module-store ^101.1, magento/module-catalog ^104.0, magento/module-cms ^104.0, magento/module-config ^101.2, magento/module-backend ^102.0 and magento/module-cron ^100.4.

Requirements

  • Magento 2.4.4 or later
  • PHP 8.1 to 8.4
  • mage2kishan/module-core (installed automatically by Composer; provides the shared "Panth Extensions" admin tab)
  • Outbound HTTPS access from the web server to api.indexnow.org
  • Magento cron running, if Submission Mode is set to "By cron" or failed submissions should be retried
  • An IndexNow key: 8 to 128 characters, using only letters, digits and dashes. Bing offers a generator at bing.com/indexnow; any string in that format works. Keys in any other format are flagged under the field before the configuration is saved, and rejected by the server if the browser check is bypassed.

Installation

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 cache:flush

setup:di:compile is only needed in production mode. In production mode also run bin/magento setup:static-content:deploy for the admin area, as the module ships a small admin script that checks the API key format in the configuration form.

Check the result with:

bin/magento module:status Panth_IndexNow

The module is switched off by default. Enter a key and enable it in the configuration, then open /<key>.txt on your store's domain and confirm the key is returned.

Configuration

Go to Stores > Configuration > Panth Extensions > IndexNow.

Setting Default What it does
Enable IndexNow No Submits changed URLs on save and serves the key file.
API Key (empty) Your IndexNow key (8 to 128 letters, digits or dashes). Also used to answer the key file request.
Submit Deleted URLs Yes Submits the URL of a deleted product, category or CMS page so search engines recrawl it and drop it. Set to No to submit saves only, as in earlier versions.
Submission Mode At the end of the request "At the end of the request" submits the queued URLs when the save request finishes, with a 4 second request timeout and a 2 second connect timeout. "By cron" only stores the URLs during the save and lets the panth_index_now_flush cron job submit them every minute with a 15 second timeout.

Enable IndexNow, API Key and Submit Deleted URLs can be set per default, website or store view; Submission Mode is a global (default scope) setting. Configuration paths: panth_index_now/indexnow/enabled, panth_index_now/indexnow/api_key, panth_index_now/indexnow/submit_deletions, panth_index_now/indexnow/submission_mode.

Admin configuration

Uninstallation

bin/magento module:disable Panth_IndexNow
composer remove mage2kishan/module-index-now
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush

The panth_index_now_queue table is removed by setup:upgrade after the module is disabled and removed, as it is declared in etc/db_schema.xml. Configuration values remain in core_config_data until removed.

License

MIT License. Free and open source. The package is published on Packagist and can be installed with Composer; see the product page for the terms of use.

Developer Notes

  • Module name: Panth_IndexNow
  • Composer package: mage2kishan/module-index-now
  • PHP namespace: Panth\IndexNow
  • Observer Panth\IndexNow\Observer\IndexNow\EntityChangeObserver on catalog_product_save_after, catalog_category_save_after, cms_page_save_after and model_delete_before (products, categories and CMS pages only); URLs are queued through Panth\IndexNow\Model\IndexNow\Queue::add(int $storeId, string $url, string $action) and submitted by Queue::flush() through Panth\IndexNow\Model\IndexNow\Submitter::submit(array $urls, int $storeId, int $timeout = 15).
  • Cron job panth_index_now_flush (Panth\IndexNow\Cron\FlushQueue).
  • Frontend route panth_indexnow, controller Panth\IndexNow\Controller\Key\Index; router Panth\IndexNow\Controller\Router maps /<key>.txt to it.
  • Upgrade from Panth Advanced SEO: the data patch MigrateConfigPaths moves saved values from panth_seo/indexnow/* to panth_index_now/indexnow/* during setup:upgrade. A value that already exists at the new path for the same scope is kept, and the legacy row is left in place.
  • ACL resource for the configuration section: Panth_IndexNow::config
  • Admin key check: view/adminhtml/web/js/validation-mixin.js, registered as a mixin of mage/validation in view/adminhtml/requirejs-config.js, adds the validate-indexnow-key rule used by the API Key field (same format as Submitter::KEY_PATTERN). Nothing is loaded on the storefront.
More information
Module Category SEO & Indexing
Best For All Sizes

FAQ

Does this submit URLs to Google?

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

Do I need separate keys for Bing, Yandex, Seznam, and Naver?

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.

Where is the key file served?

https://yourstore.com/panth_indexnow/key, IndexNow crawlers hit this URL to verify domain ownership before trusting submitted URLs.

What happens if the IndexNow API is down?

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.

Will this slow down product saves?

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.

Does it work with Hyva?

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.

Can I submit a sitemap URL manually?

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.

Is Panth_Core required?

Yes. mage2kishan/module-core is a required dependency and is pulled in automatically by Composer. Core provides the admin tab layout and common utilities.

Does it support multi-store / multi-language?

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.

What about product / category / CMS page deletions?

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.

Will this hit rate limits?

IndexNow allows up to 10,000 URLs per POST. The module batches automatically via array_chunk, so a burst of 15,000 saves produces two POSTs (10K + 5K). You're extremely unlikely to hit IndexNow's per-day limits from a normal eCommerce catalog.


Kishan Savaliya

Questions before you install?

Send me your composer.json and I will check for conflicts first. Free. Installation is +$45, custom work is quoted first.

Ask on WhatsApp