IndexNow: notifiche alla pubblicazione
IndexNow consente di notificare ai motori di ricerca la pubblicazione o modifica di un URL, senza aspettare che un crawler scopra il cambiamento. Pro invia all’endpoint condiviso api.indexnow.org, che distribuisce la notifica ai partecipanti al protocollo, tra cui Amazon, Bing, Yandex, Naver, Seznam e Yep, con una sola chiamata. Non vengono effettuate chiamate separate per ogni motore. La notifica non garantisce indicizzazione.
La funzione è disattivata per impostazione predefinita. Non ci sono richieste di rete finché non la abiliti e invii un URL.
Configurazione iniziale
1. Generare una chiave
IndexNow verifica il controllo dell’host tramite una chiave. Pro accetta da 8 a 128 caratteri dell’insieme [a-f0-9-]; una stringa esadecimale di 32 caratteri è adatta. Generala una volta, mantienila stabile e configurala nell’ambiente:
dotenv
SEO_PRO_INDEXNOW_ENABLED=true
SEO_PRO_INDEXNOW_KEY=0123456789abcdef0123456789abcdefLa chiave passa dalla configurazione e resta disponibile con config:cache
A differenza delle credenziali Search Console, la chiave IndexNow non è un segreto: viene servita pubblicamente in /{key}.txt per verificare il controllo dell’host. Pro la legge quindi dalla configurazione, indexnow.key, il cui valore predefinito è env('SEO_PRO_INDEXNOW_KEY'). Le variabili definite soltanto in .env non sono disponibili tramite env() fuori dalla configurazione quando è attiva config:cache; una lettura al momento della chiamata potrebbe quindi perderle in produzione. La configurazione le acquisisce quando viene creata la cache. Dopo aver cambiato chiave, riesegui php artisan config:cache. La chiave non viene scritta nei log. Se il file restituisce 404 in produzione, vedi Server con configurazione in cache.
2. Servire il file della chiave
IndexNow scarica https://{host}/{key}.txt, contenente soltanto la chiave, per verificare l’host. Con l’opzione route attiva, come per impostazione predefinita, Pro lo serve automaticamente:
GET https://example.com/0123456789abcdef0123456789abcdef.txt → the key, text/plainLa rotta risponde solo al percorso della chiave configurata; gli altri percorsi intercettati *.txt restituiscono 404. Quando IndexNow è disabilitato, anche la rotta della chiave restituisce 404. Se preferisci ospitare il file direttamente o su una CDN, disattiva route e imposta key_location sul suo URL.
Inviare URL
Automaticamente al salvataggio
Aggiungi il trait al modello e abilita auto_submit. Ogni salvataggio idoneo accoda l’invio dell’URL restituito da getUrlForSEO():
php
use Rankbeam\Seo\Pro\IndexNow\Concerns\SubmitsToIndexNow;
class Post extends Model
{
use SubmitsToIndexNow;
}dotenv
SEO_PRO_INDEXNOW_AUTO_SUBMIT=trueIl trait rispetta un controllo di pubblicazione. Implementa shouldSubmitToIndexNow(): bool per definirlo; altrimenti usa l’attributo is_published, se presente, oppure invia a ogni salvataggio. L’invio è sempre in coda, quindi il salvataggio del modello non aspetta la rete.
Manualmente
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() accoda per impostazione predefinita. Passa queue: false per eseguire nello stesso processo.
Dalla riga di comando
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 queuingSolo URL dello stesso host
Ogni URL deve usare http(s) e appartenere all’host configurato. Gli altri vengono scartati, conteggiati ma mai inviati; l’endpoint rifiuterebbe comunque un host diverso. Gli elenchi che superano max_urls_per_request, pari a 10.000 nel limite del protocollo, vengono suddivisi automaticamente.
Configurazione
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,
],Nuovi tentativi
SubmitToIndexNowJob riprova gli errori temporanei: 429, 5xx e timeout seguono backoff fino al limite tries. Errori permanenti del client come 400, 403 e 422, per esempio chiave errata o host diverso, vengono registrati e interrompono i tentativi. 200 e 202 indicano rispettivamente ricezione e attesa della verifica della chiave; entrambi sono trattati come invii riusciti.
In produzione assegna al job una coda dedicata, così un endpoint lento non ritarda altre operazioni dell’applicazione:
php
Schedule::command('seo-pro:indexnow --sitemap')->daily();Risoluzione dei problemi
Server con configurazione in cache
Se /{key}.txt restituisce 404 in produzione, o gli invii non partono nonostante indexnow.enabled sia true, controlla che la chiave non esista soltanto in .env su un server con php artisan config:cache. Laravel non rilegge .env quando la configurazione è in cache: una lettura runtime con env('SEO_PRO_INDEXNOW_KEY') può restituire null, impedendo la registrazione della rotta e lasciando gli invii nello stato “not configured”.
La configurazione predefinita legge indexnow.key da env(...) durante la creazione della cache e funziona normalmente. Il problema si presenta se hai pubblicato la configurazione e rimosso quel valore predefinito, oppure usi un nome key_env personalizzato presente soltanto in .env. Puoi correggerlo in due modi:
- Conserva la chiave nella configurazione, scelta consigliata. Lascia
indexnow.keyimpostato aenv('SEO_PRO_INDEXNOW_KEY'), oppure a un valore letterale, e rieseguiphp artisan config:cache. Ogni successiva rotazione richiede di ricreare la cache. - Definisci una vera variabile d’ambiente del processo. Imposta
SEO_PRO_INDEXNOW_KEYnel pool PHP-FPM conenv[...], in systemd conEnvironment=o nelle impostazioni della piattaforma, anziché soltanto in.env. Le variabili del sistema restano leggibili con la configurazione in cache.
Esegui php artisan seo:doctor: quando rileva questa situazione, mostra “IndexNow is enabled but no valid key resolves” insieme alla correzione. Pro registra anche un avviso una volta per processo se l’app si avvia con configurazione in cache e chiave non leggibile.
Google non figura tra i partecipanti IndexNow elencati nel protocollo. Per Google usa l’integrazione Search Console e una sitemap aggiornata.