Os arquivos robots.txt e sitemap.xml podem ser dinâmicos por meio de um redirecionamento .htaccess?

12

Eu tenho um site multilíngue e de vários domínios. Ele é executado através de uma instalação exclusiva do CMS (Drupal), então eu tenho um único diretório raiz. Portanto, se eu tenho um robots.txt estático, só posso mostrar os arquivos para um único domínio, tanto quanto eu sei.

Eu poderia colocar uma linha em .htaccess

Redirect 301 /robots.txt /robots.php

(ou instrução equivalente e, por favor, indique qual, se permitido)

então ele redireciona para um arquivo php dinâmico, onde eu posso servir diferentes conteúdos de acordo com o $_SERVER['HTTP_HOST']?

E a mesma pergunta para sitemap.xml , para que eu possa servir um sitemap.php dinâmico que indica links diferentes para cada domínio diferente.

O problema de não usar .txt e .xml é, como mencionado, que todos os domínios compartilham um único diretório físico no computador servidor.

Cesar
fonte

Respostas:

11

Você pode tornar qualquer arquivo dinâmico. A melhor maneira de fazer isso não é através de redirecionamentos, mas através de regras de reescrita.

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

Dessa forma, você o habilita com um script dinâmico, mas a URL não muda. A maioria dos rastreadores (incluindo o Googlebot) seguirá redirecionamentos para robots.txt , mas alguns rastreadores ficarão confusos se você introduzir redirecionamentos.

Observe que, mesmo que você o use com PHP, seu robots.txt deve parecer estático para cada rastreador de cada domínio. É bom veicular conteúdo diferente para domínios diferentes ou mesmo para diferentes agentes de usuário. No entanto, exibir conteúdo diferente aleatoriamente ou com base na hora do dia pode realmente confundir os rastreadores dos mecanismos de pesquisa e atrapalhar o seu SEO.


Os Sitemaps são bons para nomear como quiser. Você pode redirecioná-las ou usar uma regra de reescrita para ativá-las dinamicamente no mesmo URL. Você também pode nomeá-los como

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

Em seguida, consulte-os no robots.txt :

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

ou envie-os aos mecanismos de pesquisa manualmente por meio de suas ferramentas para webmasters ou console de pesquisa.

Stephen Ostermiller
fonte
Obrigado a ambos pela sua resposta. Corrija o que pode ser um erro de digitação, é a instrução w3d que funcionou, portanto o código deve estar RewriteRule ^robots\.txt$ robots.php [L]sem o símbolo \.
Cesar
Sim, a versão com a barra seria apropriada para o seu arquivo apache.conf. Para .htaccess, é necessário deixá-lo desativado. Eu editei a resposta para incluir a versão apropriada para .htaccess.
Stephen Ostermiller
@Cesar O prefixo de barra no padrão (ou seja, ^/robots\.txt$) seria necessário se essa diretiva estivesse na configuração do servidor, mas sim, ela não corresponderá nos arquivos .htaccess por diretório. O prefixo de barra na substituição (ou seja /robots.php) é opcional neste caso.
MrWhite
5

Sim, da mesma forma que qualquer solicitação pode ser "dinâmica".

No entanto, você não redirecionaria (como no seu código de exemplo), você deve reescrever internamente usando mod_rewrite. (O mesmo que o Drupal provavelmente já está fazendo.)

Por exemplo, no seu arquivo .htaccess raiz:

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

RewriteEngine deve ocorrer apenas uma vez (embora realmente não importe se ocorre várias vezes).

Você só precisa garantir que não entre em conflito com outras diretivas do seu arquivo .htaccess. Portanto, isso provavelmente deve estar próximo do início do arquivo, certamente antes do seu controlador frontal .

Sr. White
fonte
4

Tornar dinâmico o arquivo do mapa do site é bom - é uma boa maneira de atualizar automaticamente seus mapas de site.

Tornar o arquivo robots.txt dinâmico (para o mesmo host! Fazer isso para hosts separados é essencialmente apenas um arquivo robots.txt normal para cada um deles.) Provavelmente causaria problemas: ele não é rastreado toda vez que um URL é rastreado no site , para que a versão "incorreta" seja armazenada em cache. Por exemplo, se você bloquear o rastreamento do arquivo robots.txt durante o horário comercial, é possível que ele seja armazenado em cache e seguido por um dia - o que significa que nada é rastreado (ou, alternativamente, armazenado em cache quando o rastreamento é permitido). O Google rastreia o arquivo robots.txt cerca de uma vez por dia para a maioria dos sites, por exemplo.

John Mueller
fonte
Não vejo diferença aqui entre estático ou dinâmico. Eu também usaria a parte dinâmica para oferecer versões diferentes de acordo com hosts diferentes, mas como todos os hosts compartilham o mesmo diretório físico no servidor do computador, é uma maneira de ter robots1.txt, robots2.txt, robots3.txt (numbers significado em que domínio estamos).
Cesar
Não acho que dinâmica aqui signifique que eles desejam veicular conteúdo diferente a cada vez. Eles só querem alimentá-lo via PHP para que possam tomar decisões com base no nome do host no código PHP. Costumo tornar o robots.txt dinâmico para veicular regras diferentes para diferentes agentes do usuário.
Stephen Ostermiller
2
Sim, como mencionei, fazer isso para vários hosts é essencialmente como ter arquivos robots.txt separados por host, o que é bom. No entanto, às vezes vemos sites tentando controlar o rastreamento por hora do dia usando um arquivo robots.txt dinâmico, o que causa muitos problemas.
John Mueller
Bom ponto. Editei minha resposta aceita com um aviso para não tornar o robots.txt muito dinâmico.
Stephen Ostermiller
0

Não há necessidade de criar sitemap.php porque: 1. Para cada idioma, você pode executar um arquivo sitemap.xml separado e especificar cada um nos consoles do mecanismo de pesquisa. 2. Os arquivos de sitemap padrão podem ser reescritos regularmente para incluir conteúdo recente e os tornam dinâmicos - pois esse arquivo .php não é necessário. Cabe ao mecanismo de atualização interno e ao cron recriar o mesmo arquivo com a extensão padrão .xml

Os arquivos Sitemap.xml são estáticos e apenas as atualizações os tornam dinâmicos - eles não são atualizados em tempo real. É possível fazer com que eles reescrevam a cada minuto, mas não há necessidade porque: 1. O Google não faz o check-in em menos de uma hora desde o último envio 2. Quando os arquivos do sitemap são grandes, reescreva-os muitas vezes fará com que o desempenho do servidor diminua.

Quando há um grande volume de dados e o arquivo do sitemap é maior que 50mb, é necessário um sistema com vários sitemaps. Isso significa que o sitemap2,3 ... .xml será adicionado à lista do arquivo principal, mas o conteúdo desses arquivos também será corrigido até que esses arquivos sejam recriados (pelo cron, por exemplo).

Além disso, uma vez que um mecanismo de pesquisa acessou o arquivo, ele não retornará a ele muito rapidamente (a menos que seja feito manualmente). Ele confirma que não é necessário, em nenhum caso, criar uma atualização em tempo real do sitemap.php, porque um sitemap.xml normal por si só pode ser dinâmico, atualizando com novo conteúdo ao longo do dia ou uma semana.

Não consigo pensar em nenhum profissional usando um sitemap.php. Não será bom, pois existem outras maneiras melhores / adequadas de usar esses arquivos.

igi
fonte
Alguns motivos pelos quais a dinâmica pode ser preferida: os Sitemaps ocupam muito espaço em disco, enquanto a geração dinâmica ocupa nenhum. Os Sitemaps precisam ser atualizados e os Sitemaps dinâmicos podem ser uma maneira fácil de fazer isso.
Stephen Ostermiller