¿Pueden los archivos robots.txt y sitemap.xml ser dinámicos a través de una redirección .htaccess?

11

Tengo un sitio multilenguaje y multidominio. Se ejecuta a través de una instalación única de CMS (Drupal), por lo que tengo un único directorio raíz. Entonces, si tengo un archivo robots.txt estático, solo puedo mostrar los archivos de un solo dominio, que yo sepa.

¿Podría poner una línea en .htaccess?

Redirect 301 /robots.txt /robots.php

(o instrucciones equivalentes y, por favor, indique cuál de ellas está permitida)

por lo que redirige a un archivo php dinámico, donde puedo servir diferentes contenidos de acuerdo con el $_SERVER['HTTP_HOST']?

Y la misma pregunta para sitemap.xml , por lo que puedo servir un sitemap.php dinámico que indica diferentes enlaces para cada dominio diferente.

El problema con no usar .txt y .xml es, como se mencionó, que todos los dominios comparten un único directorio físico en la computadora del servidor.

Cesar
fuente

Respuestas:

11

Puede hacer que cualquier archivo sea dinámico. La mejor manera de hacerlo no es a través de redireccionamientos, sino a través de reglas de reescritura.

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

De esa manera, lo potencia con un script dinámico, pero la URL no cambia. La mayoría de los rastreadores (incluido Googlebot) seguirán los redireccionamientos para robots.txt , pero algunos rastreadores se confundirán si introduce redireccionamientos.

Tenga en cuenta que incluso si lo alimenta con PHP, su robots.txt debería parecer estático para cada rastreador para cada dominio. Está bien servir diferentes contenidos para diferentes dominios, o incluso para diferentes agentes de usuario. Sin embargo, servir contenido diferente al azar o según la hora del día realmente puede confundir a los rastreadores de los motores de búsqueda y arruinar su SEO.


Los sitemaps están bien nombrados como quieras. Puede redirigirlos o usar una regla de reescritura para activarlos dinámicamente en la misma URL. También puedes nombrarlos como

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

Luego refiérase a ellos en robots.txt :

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

o enviarlos a los motores de búsqueda manualmente a través de sus herramientas de webmaster o consola de búsqueda.

Stephen Ostermiller
fuente
Gracias a ambos por su respuesta. Corrija lo que podría ser un error tipográfico, fue la instrucción w3d la que funcionó, por lo que el código debe estar RewriteRule ^robots\.txt$ robots.php [L]sin el símbolo \.
Cesar
Sí, la versión con la barra inclinada sería apropiada para su archivo apache.conf. Para .htaccess, debe dejarlo apagado. He editado la respuesta para incluir la versión adecuada para .htaccess.
Stephen Ostermiller
@Cesar El prefijo de barra en el patrón (es decir ^/robots\.txt$) sería necesario si esta directiva estuviera en la configuración del servidor, pero sí, no coincidirá en los archivos .htaccess por directorio. El prefijo de barra en la sustitución (es decir /robots.php) es opcional en este caso.
MrWhite
5

Sí, de la misma manera cualquier solicitud puede ser "dinámica".

Sin embargo, no redirigiría (como en su código de ejemplo), debería reescribir internamente usando mod_rewrite. (Lo mismo que probablemente Drupal ya está haciendo).

Por ejemplo, en su archivo raíz .htaccess:

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

RewriteEngine solo debe ocurrir una vez (aunque en realidad no importa si ocurre varias veces).

Solo tiene que asegurarse de que no entre en conflicto con otras directivas en su archivo .htaccess. Por lo tanto, esto probablemente debería estar cerca del inicio del archivo, ciertamente antes de su controlador frontal .

Señor White
fuente
4

Hacer que el archivo del mapa del sitio sea dinámico está bien: es una buena manera de actualizar automáticamente los mapas del sitio.

Hacer que el archivo robots.txt sea dinámico (¡para el mismo host! Hacer esto para hosts separados es esencialmente solo un archivo robots.txt normal para cada uno de ellos) probablemente causaría problemas: no se rastrea cada vez que se rastrea una URL desde el sitio , por lo que puede suceder que la versión "incorrecta" esté almacenada en caché. Por ejemplo, si hace que su archivo robots.txt bloquee el rastreo durante el horario comercial, es posible que luego se almacene en caché y se siga durante un día, lo que significa que nada se rastrea (o alternativamente, se almacena en caché cuando se permite el rastreo). Google rastrea el archivo robots.txt aproximadamente una vez al día para la mayoría de los sitios, por ejemplo.

John Mueller
fuente
No veo diferencia aquí entre estática o dinámica. También usaría la parte dinámica para ofrecer diferentes versiones de acuerdo con diferentes hosts, pero como todos los hosts comparten el mismo directorio físico en el servidor de la computadora, esa es una forma de tener robots1.txt, robots2.txt, robots3.txt (números significado en qué dominio estamos).
Cesar
No creo que esa dinámica aquí signifique que quieran servir contenido diferente cada vez. Solo quieren alimentarlo a través de PHP para que puedan tomar decisiones basadas en el nombre de host en el código PHP. A menudo hago que robots.txt sea dinámico para servir diferentes reglas a diferentes agentes de usuario.
Stephen Ostermiller
2
Sí, como mencioné, hacerlo para varios hosts es esencialmente como tener archivos robots.txt separados por host, lo cual está bien. Sin embargo, a veces vemos sitios que intentan controlar el rastreo por hora del día usando un archivo robots.txt dinámico, lo que causa muchos problemas.
John Mueller
Buen punto. He editado mi respuesta aceptada con una advertencia para no hacer que robots.txt sea muy dinámico.
Stephen Ostermiller
0

No es necesario crear sitemap.php porque: 1. Para cada idioma, puede ejecutar un archivo sitemap.xml separado y especificar cada uno en las consolas de los motores de búsqueda. 2. Los archivos de mapa de sitio estándar se pueden reescribir regularmente para incluir contenido reciente y los hace dinámicos, por lo que no se requiere .php. Depende del mecanismo de actualización interno y del cron recrear el mismo archivo con la extensión estándar .xml

Los archivos Sitemap.xml son estáticos y solo las actualizaciones los hacen dinámicos; no se actualizan en tiempo real. Es posible que haga que se reescriban cada minuto, pero no es necesario porque: 1. Google no lo comprobará en menos de 1 hora desde el último envío 2. Cuando los archivos del mapa del sitio son grandes, vuelva a escribirlos a menudo hará que el rendimiento del servidor sea kaput.

Cuando hay un gran volumen de datos y el archivo del mapa del sitio supera los 50 MB, se requiere un sistema con múltiples mapas del sitio. Significa que sitemap2,3 ... .xml se agregará a la lista del archivo principal, pero el contenido de estos archivos también permanece fijo hasta que estos archivos se vuelvan a crear (por ejemplo, cron).

También mencionar que una vez que un motor de búsqueda haya accedido al archivo, no volverá a acceder a él muy rápido (a menos que se haga manualmente). Confirma que no es necesario en ningún caso crear una actualización en tiempo real de sitemap.php, ya que un sitemap.xml normal puede ser dinámico por sí solo, actualizándose con nuevo contenido durante el día o una semana.

No puedo pensar en ningún profesional que use un sitemap.php. No servirá de nada, ya que hay otras formas mejores / adecuadas de usar estos archivos.

igi
fuente
Algunas razones pueden ser preferibles dinámicas: los sitemaps ocupan mucho espacio en disco mientras que la generación dinámica no ocupa ninguno. Los mapas de sitio deben mantenerse actualizados y los mapas de sitio dinámicos podrían ser una manera fácil de hacerlo.
Stephen Ostermiller