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.9(3mo ago)73.2k↓42.9%4[2 issues](https://github.com/jweiland-net/indexnow/issues)[1 PRs](https://github.com/jweiland-net/indexnow/pulls)GPL-2.0-or-laterPHP

Since Oct 29Pushed 3mo 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 1mo ago

READMEChangelogDependencies (4)Versions (10)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

### Host API Key file

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

Create a file named `[API key].txt` with your API key as content and move it into your document root directory of your website server.

#### Example

[](#example)

If you chose `abc-ABC-123` as your API key you have to create a file named `abc-ABC-123.txt` and set `abc-ABC-123` as content of that file. Upload file `abc-ABC-123.txt` into the `/var/www/my-typo3-page/public` folder. Open `https://example.com/abc-ABC-123.txt` to make sure the file is public available and its content is `abc-ABC-123`.

### 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 use your API key and request the file:

```
[API key].txt

```

with API key as content from your server. If it does not exist, validation fails and search engines will provide updated information much later.

### 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, if file with API key is available.

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

44

—

FairBetter than 92% of packages

Maintenance76

Regular maintenance activity

Popularity30

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 73.7% 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 ~261 days

Recently: every ~109 days

Total

7

Last Release

94d 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)")[![ttg-wolfhoel](https://avatars.githubusercontent.com/u/124867428?v=4)](https://github.com/ttg-wolfhoel "ttg-wolfhoel (8 commits)")[![hojalatheef](https://avatars.githubusercontent.com/u/144037456?v=4)](https://github.com/hojalatheef "hojalatheef (2 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

[sinso/app-routes

Easy way to route rest-like URLs to your code

23110.0k1](/packages/sinso-app-routes)[hn/typo3-mcp-server

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

708.9k](/packages/hn-typo3-mcp-server)[sourcebroker/t3api

REST API for your TYPO3 project. Config with annotations, build in filtering, pagination, typolinks, image processing, serialization contexts, responses in Hydra/JSON-LD format.

3880.8k4](/packages/sourcebroker-t3api)[pixelant/pxa-social-feed

Add Facebook, Instagram, and Twitter feeds to your site.

2749.1k](/packages/pixelant-pxa-social-feed)[b13/slimphp-bridge

Provides a middleware for registering Slim PHP applications within TYPO3 Frontend Sites

2047.2k1](/packages/b13-slimphp-bridge)[kitodo/presentation

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

436.1k5](/packages/kitodo-presentation)

PHPackages © 2026

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