Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: OpenID Connect / OAuth client 3.0.0-alpha9 New alpha version released for module openid_connect (3.0.0-alpha9). Usage Milestone: Google Analytics Module google_analytics crossed 1,000 active installs. Release: Timelinr 1.0.1 Minor update available for module timelinr (1.0.1). Release: GraphQL Compose Codegen 1.1.2 Minor update available for module graphql_compose_codegen (1.1.2). Release: Mapy.com 1.1.3 Minor update available for module mapycom (1.1.3). Release: Ckeditor5 entity browser 3.0.3 Minor update available for module ckeditor5_entity_browser (3.0.3). Release: Ckeditor5 entity browser 3.0.1 Minor update available for module ckeditor5_entity_browser (3.0.1). Release: Ckeditor5 entity browser 3.0.2 Minor update available for module ckeditor5_entity_browser (3.0.2). Release: Teamleader Integration 4.0.2 Minor update available for module teamleader (4.0.2). Module Revived: Entityqueue Buttons 1.1.2 Module entityqueue_buttons updated after 8 months of inactivity (1.1.2).

Index Now

850 sites Security covered Drupal 10–11
View on drupal.org

This module automatically notifies search engines like Bing, Amazon, and Yandex when content on your website is created, updated, or deleted. It can also be configured to handle e-commerce products and stores. This helps ensure your new and changed content is quickly discovered by search engines.

Index Now submits requests to search engines when content (nodes /
taxonomy terms) has been created, updated or deleted on your website.
The module provides a service that you can use to send more requests
according to your needs.
The submodule Index Now Commerce extends the main module to also handle
commerce stores and products.

Supported search engines:

  • Amazon
  • IndexNow
  • Microsoft Bing
  • Naver
  • Seznam.cz
  • Yandex
  • Yep

Note: Since November 2021, compatible search engines immediately share all
submitted URLs with every other compatible search engine.
This means that if you choose to notify one search engine,
you notify every other one in the same time.

Requirements

The 3.x module requires Config split in order to activate it only on a production environment.

Not required anymore in 4.x but still recommended.

Installation

3.1.x

Install as you would normally install a contributed Drupal module. Visit
https://www.drupal.org/node/1897420 for further information.

For commerce stores and products you also need to enable the
index_now_commerce sub-module.

4.0.x

The 4.0.x branch splits entity type support into dedicated sub-modules.
After enabling the main index_now module, enable the sub-module(s) for each entity type you want to submit to IndexNow:

  • index_now_node — nodes
  • index_now_term — taxonomy terms
  • index_now_commerce_product — Commerce products (requires Drupal Commerce)
  • index_now_commerce_store — Commerce stores (requires Drupal Commerce)

Configuration

Go to /admin/config/services/index_now and choose the default search engine
you want to interact with.
You can also exclude content types, taxonomy vocabularies and/or commerce
stores/products types for which you don't want to use Index Now.

This module has to be used only on a production environment (search engines
can't crawl your local machine and there is no reason to index a preprod env).

After configuring Index Now (/admin/config/services/index_now), you need to
define a configuration for your production environment.
Go to admin/config/development/configuration/config-split, add a configuration
split setting if you don't have already one for your production environment,
then add a directory path for this config and enable "Index Now" in the
"Complete split" > "Modules" section.
Don't forget to export your configuration after submitting the form.

An API key has been generated for you when you installed/updated the module.
You can override the API key value if needed in your settings(.local).php:

$config['index_now.settings']['api_key'] = 'whatever-you-want';

If your site needs to index under a specific URL (for example, in a headless
CMS), you may specify an override in your settings(.local).php:

// All internal routes will be indexed using https://example.com as base url.
$settings['index_now.base_url'] = 'https://example.com';

When this setting is configured, the API key verification file must be served
by the public domain. Drupal cannot serve it there automatically, so you must
create it manually. First, retrieve your API key:

drush config:get index_now.settings api_key

Then create the following file on your public domain:

  • Filename: index_now_api_key_{your-api-key}.txt
  • Content: {your-api-key}

Important: $settings['index_now.base_url'] only replaces the scheme and
host of the URL submitted to search engines — it does not alter the path. The
URL path structure must be identical on both your internal Drupal domain and
the public domain. For more complex URL transformations, use
hook_index_now_url_alter — see the Hooks section below.

Service

The module provides a service that can be used to index other URLs than just
nodes, taxonomy terms and commerce stores/products pages:

\Drupal::service('index_now.indexnow')->sendRequest($your_url);

Note: $your_url must be an absolute URL hosted on your website.

Hooks

The module exposes two hooks, documented in index_now.api.php.

hook_index_now_url_alter(&$url, $context)

Alter the URL submitted to search engines before it is sent. Useful when your
frontend uses a different path structure than Drupal (e.g. headless CMS). The
$context array may contain an entity key holding the entity that triggered
the ping, allowing you to build the public URL based on entity type, bundle, or
any other property:

function example_index_now_url_alter(string &$url, array $context): void {
  $entity = $context['entity'] ?? NULL;
  if ($entity instanceof \Drupal\node\NodeInterface) {
    $url = 'https://example.com/' . $entity->bundle() . '/' . $entity->id();
  }
}

hook_index_now_key_location_url_alter(&$key_location)

Alter the URL of the API key verification file sent to search engines. Useful
when the key file is served from a different location than the base URL (e.g.
a CDN):

function example_index_now_key_location_url_alter(string &$key_location): void {
  $key_location = 'https://cdn.example.com/index_now_api_key_abc123.txt';
}

Drush command

In case you would need to regenerate the API key you can use the drush command:
drush index_now:keygenerate or its alias drush indnowkeygen

Maintainers

Current maintainers:

Depends on

Dependencies of the latest stable release

Required by

1 tracked project depends on this one

Activity

Tracked releases
12
Tracked since
Jan 2025
Latest release
2 months ago
Releases (12 mo)
11 ▲ from 1
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
3.1.11 Stable 10–11 Jun 13, 2026
3.1.10 Stable 10–11 May 28, 2026
4.0.0-alpha2 Pre-release 11 May 27, 2026
3.1.9 Stable 10–11 Apr 27, 2026
4.0.0-alpha1 Pre-release 11 Apr 27, 2026
3.1.8 Stable 10–11 Apr 21, 2026
4.0.x-dev Dev 11 Apr 19, 2026
3.1.7 Stable 10–11 Apr 19, 2026
3.1.6 Stable 10–11 Apr 19, 2026
3.1.5 Stable 10–11 Mar 9, 2026
3.1.4 Stable 10–11 Feb 8, 2026
3.1.3 Stable 10–11 Jan 30, 2025