Skip navigation
Scope

Enter at least two characters.
Searching…
No matching documentation found.
Search is temporarily unavailable.

IndexNow

Notify search engines when your content changes

Normally, search engines discover changes to your site on their own schedule, which can take days or weeks. IndexNow lets Kirby SEO notify participating search engines when page content is updated or a page changes status or slug. The search engines decide when to crawl the URL.

IndexNow is supported by Bing, Yandex, Seznam, and others. Kirby SEO sends a single request to api.indexnow.org, which propagates to all participating search engines. Google does not support IndexNow but is not affected by it.

How it works

IndexNow is triggered on three events:

  • A page's content is updated
  • A page changes status (e.g. draft to listed)
  • A page's slug changes

Only pages that are listed and not marked as noindex are submitted. On local environments (localhost), no requests are sent.

API key

IndexNow requires an API key to verify that you own the domain. Kirby SEO generates one automatically and caches it permanently. Search engines can verify it at https://example.com/indexnow-{key}.txt, which Kirby SEO serves as a route. You don't need to manage this yourself.

By default, only the changed page itself is submitted. But when a page changes, other pages might be affected too: a blog post's parent archive shows a different excerpt, or sibling pages have updated navigation.

You can configure rules to submit related URLs along with the changed page:

// site/config/config.php
return [
  'tobimori.seo' => [
    'indexnow' => [
      'rules' => [
        // when a blog post changes, also re-index its parent
        '/blog/*' => ['parent' => true],

        // when an article changes, re-index two levels of parents and specific URLs
        'article' => ['parent' => 2, 'urls' => ['/blog', '/']],

        // when a product changes, re-index siblings and all category pages
        'product' => ['parent' => true, 'siblings' => true, 'templates' => ['category']],
      ],
    ],
  ],
];

Rules match either by URL pattern (/blog/*) or by template name (article). Each rule can use any combination of:

  • parent: true for the direct parent, or a number for how many levels up
  • children: true for all descendants, or a number to limit depth
  • siblings: true to include all pages at the same level
  • urls: an array of specific URLs to submit
  • templates: an array of template names, all pages with those templates will be submitted