Você sempre pode usar um URL para o sitemap que não será divulgado para mais ninguém além dos mecanismos para os quais você enviará explicitamente.
Dê uma olhada no link
Eu tenho um site de "conteúdo" que alguns leechers e 419 scammers adoram rastrear agressivamente, o que também gera custos e problemas de desempenho. :( eu não tenho escolha: eu preciso impedi-los para acessar os arquivos sitemap e índice.: (
Eu estou fazendo o mesmo que o Facebook: eu gero um índice de sitemap na mosca (/sitemap.php). Eu coloquei na lista de permissões os "bons" rastreadores com pesquisa reversa de DNS (PHP) e verificação de agente (Igual a Stackoverflow). Para evitar que mecanismos whitelisted tornem público o conteúdo do índice do sitemap, adicionei esse cabeçalho (o Stackoverflow esqueceu-o):
header('Content-type: application/xml; charset="UTF-8"', true);
header('Pragma: no-cache');
header('X-Robots-Tag: NOARCHIVE');
Pergunta 1: Estou faltando alguma coisa para proteger o arquivo de índice do sitemap?
Pergunta 2: O problema vem dos arquivos estáticos de sitemap (.xml.gz) gerados. Como posso protegê-los? Mesmo que tenham um nome "difícil de adivinhar", eles podem ser encontrados facilmente com uma simples consulta ao Google (por exemplo: " site: stackoverflow.com filetype: xml ") e eu tenho um acesso muito limitado ao .htaccess.
EDITAR: Este não é um problema de configuração do servidor. A linguagem preferida é o PHP.
EDIT 2: Desculpe, esta é uma questão puramente programática, mas foi transferida do SO e não consigo fechar / excluir. : (
Você sempre pode usar um URL para o sitemap que não será divulgado para mais ninguém além dos mecanismos para os quais você enviará explicitamente.
Dê uma olhada no link
Você deve usar uma lista de permissões e permitir apenas bons mecanismos de pesquisa para acessar esses arquivos de sitemap, como o Google e o Bing.
Esse é um grande problema que eu acho que a maioria das pessoas nem considera ao enviar arquivos de sitemap para o Google e o Bing. Eu acompanho cada solicitação aos meus arquivos xml sitemap e neguei acesso a mais de 6.500 IPs desde que comecei a fazer isso (há 3 meses). Apenas o Google, Bing e alguns outros só para ver esses arquivos agora.
Como você está usando uma lista de permissões e não uma lista negra, eles podem comprar todos os proxies que quiserem e nunca conseguirão. Além disso, você deve realizar uma pesquisa reversa de DNS, bem antes da whitelist e do IP, para garantir que eles realmente sejam do Google ou do Bing. Quanto a como fazer isso em PHP, não faço ideia, já que somos uma loja da Microsoft e só fazemos desenvolvimento ASP.NET. Eu começaria obtendo o intervalo de IPs dos quais o Google e Bing executam seus bots, então quando uma solicitação chegar de um desses IPs, faça uma pesquisa de DNS e certifique-se de que "googlebot" ou "msnbot" esteja no nome DNS Em caso afirmativo, execute uma pesquisa reversa de DNS em relação a esse nome para garantir que o endereço IP retornado corresponda ao endereço IP original. Em caso afirmativo, você pode permitir com segurança o IP para visualizar o arquivo do sitemap, se isso não acontecer, negar acesso e 404 os jokers. Eu tenho essa técnica falando com um técnico do Google BTW, então é bem sólido.
Note, eu possuo e opero um site que faz cerca de 4.000.000 de page views por mês, então para mim isso era uma grande prioridade, pois eu não queria que meus dados fossem facilmente descartados. Além disso, uso o recaptcha depois de 50 solicitações de páginas do mesmo IP em um período de 12 horas e isso realmente funciona bem para eliminar bots.
Aproveitei o tempo para escrever este post, pois espero que ele ajude outra pessoa e lance alguma luz sobre o que eu considero ser um problema que passa despercebido.
Que tal não criar o sitemap.php na hora? Em vez disso, regenere-o uma vez por dia (ou o que fizer sentido) e sirva como um arquivo estático. Dessa forma, mesmo que 10.000 rastreadores solicitem por dia, e daí?
Você pode usar o robots.txt para proibir o arquivo, mas também pode bloquear o IP. Uma maneira simples de fazer isso é examinar os referenciadores de HTTP nos registros da web e escrever um cron job para obter esses IPs (por referenciador) e adicioná-los ao hosts.deny para o seu site.