PHPackages                             jweiland/indexnow - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. jweiland/indexnow

ActiveTypo3-cms-extension[API Development](/categories/api)

jweiland/indexnow
=================

TYPO3 extension to inform various search engines over IndexNow endpoint about content updates

0.0.10(3w ago)74.9k↓66.9%4[3 issues](https://github.com/jweiland-net/indexnow/issues)GPL-2.0-or-laterPHPCI passing

Since Oct 29Pushed 3w ago2 watchersCompare

[ Source](https://github.com/jweiland-net/indexnow)[ Packagist](https://packagist.org/packages/jweiland/indexnow)[ Docs](https://jweiland.net)[ RSS](/packages/jweiland-indexnow/feed)WikiDiscussions main Synced 2d ago

READMEChangelogDependencies (8)Versions (12)Used By (0)

TYPO3 Extension `indexnow`
==========================

[](#typo3-extension-indexnow)

[![Packagist](https://camo.githubusercontent.com/5ee9b5be33b429cd91d7c89cc45211ab0e172179f41b8dc26888cb6c6cf0479c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2d2d677265792e7376673f7374796c653d666f722d7468652d6261646765266c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/jweiland/indexnow/)[![Latest Stable Version](https://camo.githubusercontent.com/2e32d7e0747b65a25a7c674cffc13b22da3d313baccdc7d76b8493c18265b1ce/68747470733a2f2f706f7365722e707567782e6f72672f6a7765696c616e642f696e6465786e6f772f762f737461626c652e7376673f7374796c653d666f722d7468652d6261646765)](https://extensions.typo3.org/extension/sync_crop_areas/)[![Total Downloads](https://camo.githubusercontent.com/e6ef6dfb7e615c9ebfeb74c31023fc24e4ada357f8ded3635f4297c57515b381/68747470733a2f2f706f7365722e707567782e6f72672f6a7765696c616e642f696e6465786e6f772f642f746f74616c2e7376673f7374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/jweiland/indexnow/)[![Monthly Downloads](https://camo.githubusercontent.com/6301beaf06fc0f12420e94ddb6ec0116e01759f99282e2e359e70397f93c20f8/68747470733a2f2f706f7365722e707567782e6f72672f6a7765696c616e642f696e6465786e6f772f642f6d6f6e74686c793f7374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/jweiland/indexnow/)[![TYPO3 12.4](https://camo.githubusercontent.com/89f330ea09201bfc31035841d097a612dafb05326692ed07f4decdc56248b450/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31322e342d677265656e2e7376673f7374796c653d666f722d7468652d6261646765266c6f676f3d7479706f33)](https://get.typo3.org/version/12)[![TYPO3 13.4](https://camo.githubusercontent.com/afa776fc5e0d3171e58541b852215f62b33c4ba151d008b1794b0bd511fb9354/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332e342d677265656e2e7376673f7374796c653d666f722d7468652d6261646765266c6f676f3d7479706f33)](https://get.typo3.org/version/13)

> The extension is in a heavy development phase. Breaking changes can be expected between releases.

What is IndexNow?
-----------------

[](#what-is-indexnow)

[IndexNow](https://www.indexnow.org/) is an open protocol that allows website owners to notify search engines when their content is updated, deleted or modified, allowing for faster indexing. By using IndexNow, websites can ensure that their content is discovered and processed more quickly by search engines, potentially increasing visibility and traffic.

Without IndexNow, search engines may take longer to detect changes, which can delay how quickly updated content is reflected in search results.

What does this extension do?
----------------------------

[](#what-does-this-extension-do)

This TYPO3 extension listens for changes to various types of records (DataHandler), tries to retrieve the page UID and builds a preview URL for that page. This preview URL is then stored until the scheduler task sends this URL to IndexNow to inform search engines about new content.

Installation
------------

[](#installation)

### Installation using Composer

[](#installation-using-composer)

Run the following command within your Composer based TYPO3 project:

```
composer require jweiland/indexnow

```

### Installation using Extension Manager

[](#installation-using-extension-manager)

Login into TYPO3 Backend of your project and click on `Extensions` in the left menu. Press the `Retrieve/Update` button and search for the extension key `indexnow`. Import the extension from TER (TYPO3 Extension Repository).

Configuration
-------------

[](#configuration)

### Get API Key

[](#get-api-key)

You can define your own API key. You only have to adopt following rules:

- Minimum of 8 hexadecimal characters
- Maximum of 128 hexadecimal characters
- Allowed characters: lowercase (a-z), uppercase (A-Z), numbers (0-9), dash (-)

As an alternative you can build a valid API key at [Bing](https://www.bing.com/indexnow/getstarted)

### Extension Settings

[](#extension-settings)

Log-In to TYPO3 backend and visit module `Settings`.

Chose `Configure extensions` and open `indexnow`.

API Key : Enter the just built API key from above.

Search Engine Endpoint : Enter the API endpoint URL with IndexNow protocol. See [Search Engine endpoint list](https://www.indexnow.org/faq). We added IndexNow endpoint of Bing as default for you. All endpoints will inform search engines in the same way. It doesn't matter which endpoint you chose. The result is always the same. Just to clarify that: Using the Bing endpoint will not only inform the Bing search engine! It will inform all registered search engines.

Notify batch mode : If enabled, the search engine will be notified using batch mode. This means that modified URLs are sent in a single request. A maximum of 10,000 URLs can be sent per batch

### API Key Verification File

[](#api-key-verification-file)

IndexNow search engines [verify ownership](https://www.indexnow.org/documentation)by requesting a text file at `https://example.com/{apiKey}.txt` whose content matches the API key.

This extension **serves the verification file automatically** from the configured API key — no manual file creation needed. Once you save the API key in the extension settings, the file is immediately available at `https://your-site.com/{apiKey}.txt`.

> **Note:** The verification file is served by a PSR-15 middleware that runs early in the request pipeline. It only responds to root-level `.txt`requests matching the configured key. All other requests pass through unchanged.

### Task

[](#task)

You need TYPO3 system extension `scheduler`.

Create a new task of type `Execute console commands`.

Chose command `indexnow:notify`.

Set timings and recurring to your needs and save the task.

### Command

[](#command)

Without `scheduler` extension you need to execute the following command to inform IndexNow endpoint:

```
vendor/bin/typo3 indexnow:notify
```

Usage
-----

[](#usage)

Just change a value on a page or content element and store the record. Internally the page UID will be extracted and will be used to build a preview URL. That URL will be bind with the IndexNow API endpoint URL and stored in table `tx_indexnow_stack`.

Now you have to wait until next scheduler task run where all inserted stack entries will be processed.

FAQ
---

[](#faq)

### Scheduler Task fails

[](#scheduler-task-fails)

Please have a look into log file. You will find log file at:

```
var/log/typo3_indexnow_[hash].log
```

### IndexNow was informed, but search results are not updated

[](#indexnow-was-informed-but-search-results-are-not-updated)

The IndexNow provider will verify your API key by requesting `https://your-site.com/{apiKey}.txt`. This file is served automatically by the extension. If verification still fails, check:

1. The API key is set in extension settings (`Settings` → `Configure extensions` → `indexnow`)
2. The file is accessible: open `https://your-site.com/{apiKey}.txt` in a browser
3. No caching proxy or WAF is blocking the `.txt` file request

### I have changed content, but there is no record in `tx_indexnow_stack`

[](#i-have-changed-content-but-there-is-no-record-in-tx_indexnow_stack)

Only records stored by TYPO3 DataHandler are processed.

Please check field `no_index` in page properties of your stored record. Make sure page is allowed to be indexed through search engines.

Check logs for any problems.

Foreign extensions can hook into extension `indexnow` and prevent informing IndexNow under various circumstances.

### How can I test, if IndexNow works as expected?

[](#how-can-i-test-if-indexnow-works-as-expected)

In documentation of [Bing IndexNow getting started](https://www.bing.com/indexnow/getstarted) I found following information:

Use [Bing Webmaster Tools](https://www.bing.com/webmasters) to verify if your URLs are received by search engines.

For developers
--------------

[](#for-developers)

To prevent pages to be sent to IndexNow you can use event `ModifyPageUidEvent`.

Register your own EventListener:

```
MyVendor\MyExtension\EventListener\DoSomethingEventListener:
  tags:
    - name: event.listener
      event: JWeiland\IndexNow\Event\ModifyPageUidEvent
```

Set page UID to `0` in event class:

```
$modifyPageUidEvent->setPageUid(0);
```

This will prevent IndexNow to be informed.

Missing version tags
--------------------

[](#missing-version-tags)

I had to remove the tags `0.0.2` and `0.0.3` as these versions contain a different version in `composer.json` which related to error notifications at Packagist. You can still download these versions from TYPO3 TER or use version `0.0.4` which solves that issue.

Update
------

[](#update)

### Update to Version 0.0.7

[](#update-to-version-007)

- The debug mode has been removed, as it was primarily used for viewing the resulting URL. With xDebug, this functionality is now redundant.
- Only the URL to the stack repository is now stored; storing the API KEY in the database is inherently insecure and has been eliminated.
- The `###KEY###` and `###URL###` placeholders have been removed from the search engine endpoint configuration in the extension settings. These values are now added dynamically, allowing the URL to be reused consistently for both single and batch mode notifications.

ToDo
----

[](#todo)

Delete all records from `tx_indexnow_stack` for a specific page on delete (DataHandler).

Creating a new page or content element should call the IndexNow services. Currently, only modified pages and content elements will be processed. We should use the afterAllDatabaseOperations DataHandler hook instead.

Nice to have: Add a section into EXT:reports to check IndexNow configuration health.

Support
-------

[](#support)

Free Support is available via [GitHub Issue Tracker](https://github.com/jweiland-net/indexnow/issues).

For commercial support, please contact us at [support@jweiland.net](support@jweiland.net).

###  Health Score

48

—

FairBetter than 93% of packages

Maintenance87

Actively maintained with recent releases

Popularity31

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 64.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~240 days

Recently: every ~138 days

Total

8

Last Release

24d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/cb3188d5c1229a7c04958c000b853852b90f81036611ceff5b9641d8376bd06e?d=identicon)[jweiland.net](/maintainers/jweiland.net)

---

Top Contributors

[![sfroemkenjw](https://avatars.githubusercontent.com/u/123929835?v=4)](https://github.com/sfroemkenjw "sfroemkenjw (87 commits)")[![froemken](https://avatars.githubusercontent.com/u/2532472?v=4)](https://github.com/froemken "froemken (19 commits)")[![hojalatheef](https://avatars.githubusercontent.com/u/144037456?v=4)](https://github.com/hojalatheef "hojalatheef (19 commits)")[![ttg-wolfhoel](https://avatars.githubusercontent.com/u/124867428?v=4)](https://github.com/ttg-wolfhoel "ttg-wolfhoel (8 commits)")[![brotkrueml](https://avatars.githubusercontent.com/u/2566282?v=4)](https://github.com/brotkrueml "brotkrueml (1 commits)")[![vertexvaar](https://avatars.githubusercontent.com/u/5594393?v=4)](https://github.com/vertexvaar "vertexvaar (1 commits)")

### Embed Badge

![Health badge](/badges/jweiland-indexnow/health.svg)

```
[![Health](https://phpackages.com/badges/jweiland-indexnow/health.svg)](https://phpackages.com/packages/jweiland-indexnow)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[hn/typo3-mcp-server

TYPO3 extension that provides a Model Context Protocol (MCP) server for interacting with TYPO3 pages and records

8523.4k1](/packages/hn-typo3-mcp-server)[netresearch/rte-ckeditor-image

Image support in CKEditor for the TYPO3 ecosystem - by Netresearch

611.1M8](/packages/netresearch-rte-ckeditor-image)[pagemachine/searchable

TYPO3 extension to index and search content with Elasticsearch

1039.9k](/packages/pagemachine-searchable)[thieleundklose/autotranslate

This extension provides automatic translation of pages and content elements via DeepL API.

1213.7k](/packages/thieleundklose-autotranslate)[kitodo/presentation

Base plugins, modules, services and API of the Digital Library Framework. It is part of the community-based Kitodo Digitization Suite.

467.3k6](/packages/kitodo-presentation)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
