IndexNow: URLs bei Veröffentlichung melden
Mit IndexNow kannst du Suchmaschinen unmittelbar über veröffentlichte oder geänderte URLs informieren, statt auf deren nächsten Crawl zu warten. Pro sendet einmal an den gemeinsamen Endpunkt api.indexnow.org, der die Meldung an alle teilnehmenden Suchmaschinen weitergibt. Die offizielle FAQ nennt Amazon, Bing, Naver, Seznam, Yandex und Yep. Eine Meldung garantiert keine Indexierung.
Die Funktion ist standardmäßig aus. Netzwerkzugriffe erfolgen erst nach Aktivierung und Übermittlung einer URL.
Einrichtung
1. Einen Schlüssel erzeugen
IndexNow prüft die Kontrolle über den Host mit einem Schlüssel. Pro akzeptiert 8–128 Zeichen aus [a-f0-9-]; eine Hex-Zeichenkette mit 32 Zeichen eignet sich dafür. Erzeuge den Schlüssel einmal, behalte ihn bei und stelle ihn über die Umgebung bereit:
dotenv
SEO_PRO_INDEXNOW_ENABLED=true
SEO_PRO_INDEXNOW_KEY=0123456789abcdef0123456789abcdefDer Schlüssel wird über die Konfiguration gelesen und übersteht config:cache
Anders als Search-Console-Zugangsdaten ist der IndexNow-Schlüssel kein Geheimnis. Er wird öffentlich unter /{key}.txt ausgeliefert, um die Host-Kontrolle nachzuweisen. Pro liest ihn deshalb über indexnow.key, standardmäßig env('SEO_PRO_INDEXNOW_KEY'). Werte, die nur in .env stehen, sind nach config:cache für env() nicht mehr verfügbar, weil Laravel diese Datei dann nicht lädt. Echte Prozess-Umgebungsvariablen bleiben lesbar. Über die Konfiguration wird der Schlüssel bereits beim Aufbau des Konfigurationscaches erfasst. Nach einem Schlüsselwechsel musst du php artisan config:cache erneut ausführen. Der Schlüssel wird nicht protokolliert. Gibt die Schlüsseldatei in Produktion 404 zurück, siehe Server mit Konfigurationscache.
2. Die Schlüsseldatei ausliefern
IndexNow ruft https://{host}/{key}.txt ab. Die Datei enthält nur den Schlüssel. Bei standardmäßig aktiviertem route liefert Pro sie aus:
GET https://example.com/0123456789abcdef0123456789abcdef.txt → the key, text/plainNur der konfigurierte Schlüsselpfad liefert Inhalt. Andere von dieser Route abgefangene Pfade ergeben 404; bei deaktiviertem IndexNow liefert die gesamte Route 404. Möchtest du die Datei selbst oder über ein CDN bereitstellen, schalte route aus und setze key_location auf die entsprechende URL.
URLs übermitteln
Automatisch beim Speichern
Ergänze das Modell um den Trait und aktiviere auto_submit. Jeder Speichervorgang reiht eine Meldung für getUrlForSEO() des Modells ein:
php
use Rankbeam\Seo\Pro\IndexNow\Concerns\SubmitsToIndexNow;
class Post extends Model
{
use SubmitsToIndexNow;
}dotenv
SEO_PRO_INDEXNOW_AUTO_SUBMIT=trueDer Trait berücksichtigt den Veröffentlichungsstatus. Mit shouldSubmitToIndexNow(): bool steuerst du ihn vollständig. Andernfalls wird ein vorhandenes Attribut is_published verwendet; fehlt auch dieses, wird bei jedem Speichern übermittelt. Die Meldung wird immer eingereiht, sodass das Speichern nicht auf die HTTP-Antwort des IndexNow-Endpunkts warten muss.
Manuell
php
use Rankbeam\Seo\Pro\Facades\SeoPro;
SeoPro::indexNow()->submit('https://example.com/blog/my-post'); // one URL
SeoPro::indexNow()->submit([$urlA, $urlB]); // many (batched)
SeoPro::indexNow()->submitModel($post); // a model's URL
SeoPro::indexNow()->submitSitemap(); // every sitemap URLsubmit() verwendet standardmäßig die Queue. Mit queue: false wird direkt im Prozess gesendet.
Über die Befehlszeile
bash
php artisan seo-pro:indexnow https://example.com/a https://example.com/b
php artisan seo-pro:indexnow --sitemap # submit every URL in the sitemap registry
php artisan seo-pro:indexnow --sitemap --sync # run inline instead of queuingNur URLs desselben Hosts
Jede URL muss http(s) verwenden und zum konfigurierten host gehören. Andere URLs werden verworfen und gezählt, aber nicht gesendet. Übermitteln lassen sich nur URLs des kontrollierten Hosts; abweichende Hosts würde auch der Endpunkt ablehnen. Listen mit mehr als max_urls_per_request, standardmäßig der Protokollgrenze 10000, werden automatisch aufgeteilt.
Konfiguration
php
// config/seo-pro.php → 'indexnow'
'indexnow' => [
'enabled' => env('SEO_PRO_INDEXNOW_ENABLED', false),
'key' => env('SEO_PRO_INDEXNOW_KEY'), // the key itself, captured by config:cache
'key_env' => 'SEO_PRO_INDEXNOW_KEY', // fallback env-var NAME (real OS env var) when 'key' is empty
'key_location' => env('SEO_PRO_INDEXNOW_KEY_LOCATION'), // null = the served /{key}.txt
'endpoint' => env('SEO_PRO_INDEXNOW_ENDPOINT', 'https://api.indexnow.org/indexnow'),
'host' => env('SEO_PRO_INDEXNOW_HOST'), // null = derived from app.url
'route' => env('SEO_PRO_INDEXNOW_ROUTE', true), // serve /{key}.txt
'auto_submit' => env('SEO_PRO_INDEXNOW_AUTO_SUBMIT', false),
'max_urls_per_request' => 10000,
'timeout' => 10,
'queue' => [
'connection' => env('SEO_PRO_INDEXNOW_QUEUE_CONNECTION'),
'name' => env('SEO_PRO_INDEXNOW_QUEUE'),
],
'tries' => 3,
'backoff' => 30,
],Wiederholungen
Der eingereihte SubmitToIndexNowJob wiederholt vorübergehende Fehler wie 429, 5xx und Timeouts mit backoff bis zur konfigurierten Anzahl tries. Dauerhafte Clientfehler wie 400, 403 oder 422, etwa ungültiger Schlüssel oder falscher Host, werden protokolliert und beenden den Versuch ohne weitere Wiederholungen. 200 und 202 gelten als Erfolg: empfangen beziehungsweise ausstehende Schlüsselprüfung.
Verwende in Produktion eine eigene Queue, damit ein langsamer Endpunkt keine nutzerbezogenen Aufgaben verzögert:
php
Schedule::command('seo-pro:indexnow --sitemap')->daily();Fehlerbehebung
Server mit Konfigurationscache
Wenn /{key}.txt in Produktion 404 liefert oder Übermittlungen trotz indexnow.enabled = true nichts tun, prüfe einen möglicherweise nur in .env vorhandenen Schlüssel. Nach php artisan config:cache lädt Laravel .env nicht mehr. Ein erst zur Laufzeit daraus gelesener Schlüssel kann dann null sein: Die Schlüsselroute wird nicht registriert und Übermittlungen gelten als nicht konfiguriert.
Die Standardkonfiguration liest indexnow.key bereits beim Cache-Aufbau aus env(...), womit eine gewöhnliche Einrichtung funktioniert. Probleme entstehen insbesondere, wenn du nach Veröffentlichung der Konfiguration den env(...)-Standard entfernt oder einen eigenen key_env-Namen verwendet hast, der nur in .env existiert. Zwei Lösungen:
- Schlüssel über die Konfiguration beziehen, empfohlen. Belasse
indexnow.keybeienv('SEO_PRO_INDEXNOW_KEY')oder setze einen festen Wert und führephp artisan config:cacheerneut aus. Nach einem Schlüsselwechsel ist ein neuer Cache nötig. - Eine echte Umgebungsvariable bereitstellen. Setze
SEO_PRO_INDEXNOW_KEYfür Betriebssystem beziehungsweise Prozess, etwa mitenv[...]im PHP-FPM-Pool,Environment=in systemd oder den Umgebungsvariablen deiner Plattform. Solche Variablen bleiben auch bei gecachter Konfiguration lesbar.
Prüfe mit php artisan seo:doctor. Bei diesem Zustand meldet der Befehl „IndexNow is enabled but no valid key resolves“ samt Korrekturhinweis. Pro protokolliert außerdem einmal pro Prozess eine Warnung, wenn die App mit Konfigurationscache und unlesbarem Schlüssel startet.
Google nimmt nicht an IndexNow teil. Verwende für Google die Search-Console-Integration und eine aktuelle Sitemap.