I file robots.txt e sitemap.xml possono essere dinamici attraverso un reindirizzamento .htaccess?


12

Ho un sito multilingue e multidominio. Funziona attraverso un'installazione CMS unica (Drupal), quindi ho una singola directory root. Quindi, se ho un robots.txt statico, lì posso solo mostrare i file per un singolo dominio, per quanto ne so.

Potrei mettere una linea in .htaccess

Redirect 301 /robots.txt /robots.php

(o istruzioni equivalenti e, per favore, indica quale se consentito)

quindi reindirizza a un file php dinamico, dove posso servire diversi contenuti in base al $_SERVER['HTTP_HOST']?

E la stessa domanda per sitemap.xml , quindi posso servire un sitemap.php dinamico che indica collegamenti diversi per ogni dominio diverso.

Il problema senza l'utilizzo di .txt e .xml è, come detto, che tutti i domini condividono una singola directory fisica nel computer server.


Risposte:


11

Puoi rendere dinamico qualsiasi file. Il modo migliore per farlo non è attraverso i reindirizzamenti, ma attraverso le regole di riscrittura.

RewriteRule ^robots\.txt$  /robots.php [L]

In questo modo, lo si alimenta con uno script dinamico, ma l'URL non cambia. La maggior parte dei crawler (incluso Googlebot) seguirà i reindirizzamenti per robots.txt , ma alcuni crawler verranno confusi se si introducono i reindirizzamenti.

Si noti che anche se lo si alimenta con PHP, il tuo robots.txt dovrebbe apparire statico per ogni crawler per ogni dominio. Va bene offrire contenuti diversi per domini diversi o anche per diversi user agent. Tuttavia, pubblicare contenuti diversi in modo casuale o in base all'ora del giorno può davvero confondere i crawler dei motori di ricerca e rovinare il tuo SEO.


Le Sitemap possono essere nominate nel modo desiderato. Puoi reindirizzare quelli o utilizzare una regola di riscrittura per alimentarli dinamicamente nello stesso URL. Puoi anche nominarli come

  • sito-a-sitemap.xml
  • sito-b-sitemap.xml
  • sito-c-sitemap.xml

Quindi fare riferimento a loro in robots.txt :

Sitemap: http://www.example.com/example-sitemap.xml

o inviarli manualmente ai motori di ricerca tramite i loro strumenti per i webmaster o la console di ricerca.


Grazie ad entrambi per la tua risposta. Correggi quello che potrebbe essere un errore di battitura, è l' istruzione w3d che ha funzionato, quindi il codice dovrebbe essere RewriteRule ^robots\.txt$ robots.php [L]senza il simbolo \.
Cesar,

Sì, la versione con la barra sarebbe appropriata per il tuo file apache.conf. Per .htaccess, è necessario lasciarlo spento. Ho modificato la risposta per includere la versione appropriata per .htaccess.
Stephen Ostermiller

@Cesar Il prefisso barra sul modello (es. ^/robots\.txt$) Sarebbe richiesto se questa direttiva fosse nella configurazione del server, ma sì, non corrisponderà nei file .htaccess per directory. Il prefisso barra sulla sostituzione (es. /robots.php) È facoltativo in questo caso.
MrWhite,

5

Sì, allo stesso modo ogni richiesta può essere "dinamica".

Tuttavia, non reindirizzare (come nel codice di esempio), è necessario riscrivere internamente utilizzando mod_rewrite. (Lo stesso di quello che Drupal probabilmente sta già facendo.)

Ad esempio, nel tuo file .htaccess di root:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine dovrebbe verificarsi una sola volta (anche se non importa se si verifica più volte).

Devi solo assicurarti che non sia in conflitto con altre direttive nel tuo file .htaccess. Quindi, questo dovrebbe probabilmente essere vicino all'inizio del file, sicuramente prima del tuo front controller .


4

Rendere dinamico il file della Sitemap va bene: è un buon modo per aggiornare automaticamente le Sitemap.

Rendere dinamico il file robots.txt (per lo stesso host! Farlo per host separati è essenzialmente solo un normale file robots.txt per ognuno di essi.) Probabilmente causerebbe problemi: non viene sottoposto a scansione ogni volta che viene eseguito la scansione di un URL dal sito , quindi può succedere che la versione "errata" sia memorizzata nella cache. Ad esempio, se fai in modo che il tuo file robots.txt blocchi la scansione durante l'orario di lavoro, è possibile che venga memorizzato nella cache e seguito per un giorno, il che significa che nulla viene sottoposto a scansione (o, in alternativa, memorizzato nella cache quando la ricerca per indicizzazione è consentita). Google esegue la scansione del file robots.txt circa una volta al giorno, ad esempio per la maggior parte dei siti.


Non vedo alcuna differenza qui tra statico o dinamico. Vorrei anche utilizzare la parte dinamica per offrire versioni diverse in base a host diversi, ma poiché tutti gli host condividono la stessa directory fisica nel server del computer, questo è un modo di avere robots1.txt, robots2.txt, robots3.txt (numeri significato in quale dominio siamo).
Cesar,

Non credo che la dinamica qui significhi che vogliono offrire contenuti diversi ogni volta. Vogliono solo alimentarlo tramite PHP in modo da poter prendere decisioni in base al nome host nel codice PHP. Faccio spesso robots.txt dinamico per servire regole diverse a diversi user agent.
Stephen Ostermiller

2
Sì, come ho già detto, farlo per più host è essenzialmente come avere file robots.txt separati per host, il che va bene. Tuttavia, a volte vediamo siti che provano a controllare la scansione per ora del giorno utilizzando un file robots.txt dinamico, che causa molti problemi.
John Mueller,

Buon punto. Ho modificato la mia risposta accettata con un avvertimento di non rendere robots.txt molto dinamico.
Stephen Ostermiller

0

Non è necessario creare sitemap.php perché: 1. Per ogni lingua è possibile eseguire un file sitemap.xml separato e specificare ciascuno nelle console del motore di ricerca. 2. I file sitemap standard possono essere riscritti regolarmente per includere contenuti recenti e li rende dinamici, per cui non è richiesto .php. Spetta al meccanismo di aggiornamento interno e al cron ricreare lo stesso file con estensione standard .xml

I file Sitemap.xml sono statici e solo gli aggiornamenti li rendono dinamici, non si aggiornano in tempo reale. È possibile che li faccia riscrivere ogni minuto, ma non ce n'è bisogno perché: 1. Google non lo controllerà in meno di 1 ora dall'ultima presentazione 2. Quando i file delle Sitemap sono grandi, riscrivili spesso renderà kaput le prestazioni del server.

Quando c'è un grande volume di dati e questo rende il file Sitemap più grande di 50 MB, è necessario un sistema con più Sitemap. Significa che sitemap2,3 ... .xml verrà aggiunto all'elenco del file principale, ma il contenuto di questi file rimane fisso fino a quando questi file non vengono ricreati (ad esempio da cron).

Inoltre, menzionando che una volta che un motore di ricerca ha avuto accesso al file, non ci tornerà molto velocemente (a meno che non sia fatto manualmente). Conferma che in ogni caso non è necessario creare un aggiornamento in tempo reale di sitemap.php, perché un normale sitemap.xml è di per sé può essere dinamico, aggiornandosi con nuovi contenuti durante il giorno o la settimana.

Non riesco a pensare a nessun professionista che utilizza sitemap.php. Non funzionerà, poiché esistono altri modi migliori / adeguati per utilizzare questi file.


Potrebbero essere preferiti alcuni motivi dinamici: le Sitemap occupano molto spazio su disco mentre la generazione dinamica non ne occupa nessuna. Le Sitemap devono essere aggiornate e le Sitemap dinamiche potrebbero essere un modo semplice per farlo.
Stephen Ostermiller
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.