Могут ли файлы robots.txt и sitemap.xml быть динамическими с помощью перенаправления .htaccess?

12

У меня есть мультиязычный и многодоменный сайт. Он проходит через уникальную установку CMS (Drupal), поэтому у меня есть один корневой каталог. Поэтому, если у меня есть статический файл robots.txt, я могу показать файлы только для одного домена, насколько я знаю.

Могу ли я поставить строку в .htaccess

Redirect 301 /robots.txt /robots.php

(или эквивалентная инструкция, и, пожалуйста, укажите, какая из них разрешена)

поэтому он перенаправляет в динамический файл php, где я могу обслуживать различные содержания в соответствии с $_SERVER['HTTP_HOST']?

И тот же вопрос для sitemap.xml , поэтому я могу предоставить динамический sitemap.php, который указывает разные ссылки для каждого отдельного домена.

Проблема, связанная с отсутствием использования .txt и .xml, заключается в том, что, как уже упоминалось, все домены совместно используют один физический каталог на сервере.

Cesar
источник

Ответы:

11

Вы можете сделать любой файл динамическим. Лучший способ сделать это - не через перенаправления, а через правила перезаписи.

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

Таким образом, вы включаете его с помощью динамического сценария, но URL не меняется. Большинство сканеров (включая Googlebot) будут следовать перенаправлениям для robots.txt , но некоторые сканеры будут сбиты с толку, если вы введете перенаправления.

Обратите внимание, что даже если вы включите его с помощью PHP, ваш robots.txt должен выглядеть статичным для каждого искателя для каждого домена. Можно обслуживать разный контент для разных доменов или даже для разных пользовательских агентов. Однако подача различного контента в случайном порядке или в зависимости от времени суток может действительно запутать сканеров поисковых систем и испортить ваш SEO.


Файлы Sitemap можно назвать как угодно. Вы можете перенаправить их или использовать правило перезаписи для динамического включения их по одному и тому же URL. Вы также можете назвать их как

  • сайт-а-sitemap.xml
  • сайт-б-sitemap.xml
  • сайт-с-sitemap.xml

Тогда обратитесь к ним в robots.txt :

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

или отправьте их поисковым системам вручную с помощью инструментов для веб-мастеров или консоли поиска.

Стивен Остермиллер
источник
Спасибо обоим за ваш ответ. Пожалуйста, исправьте, что может быть опечаткой, это сработала инструкция w3d , поэтому код должен быть RewriteRule ^robots\.txt$ robots.php [L]без символа \.
Цезарь
Да, версия с косой чертой будет соответствовать вашему файлу apache.conf. Для .htaccess вы должны оставить его выключенным. Я отредактировал ответ, включив соответствующую версию для .htaccess.
Стивен Остермиллер
@Cesar Префикс косой черты в шаблоне (т. Е.) Был ^/robots\.txt$бы необходим, если бы эта директива была в конфигурации сервера, но да, она не будет совпадать в файлах .htaccess для каждого каталога. В этом случае префикс косой черты в подстановке/robots.php.
MrWhite
5

Да, точно так же любой запрос может быть «динамическим».

Тем не менее, вы не будете перенаправлять (как в вашем примере кода), вы должны внутренне переписать с помощью mod_rewrite. (То же самое, что Drupal, вероятно, уже делает.)

Например, в вашем корневом .htaccess файле:

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

RewriteEngine должно произойти только один раз (хотя это не имеет значения, если это происходит несколько раз).

Вам просто нужно убедиться, что он не конфликтует с другими директивами в вашем файле .htaccess. Таким образом, это , вероятно , следует быть рядом с начала файла, конечно же, прежде чем ваш фронт - контроллера .

MrWhite
источник
4

Создание динамического файла карты сайта - это хорошо, это хороший способ автоматически обновлять карты сайта.

Создание динамического файла robots.txt (для одного и того же хоста! Выполнение этого для отдельных хостов - это, по сути, обычный файл robots.txt для каждого из них.), Скорее всего, вызовет проблемы: он не сканируется каждый раз, когда URL сканируется с сайта , так что может случиться так, что «неправильная» версия кешируется. Например, если вы выполняете обход файла robots.txt в рабочее время, возможно, он затем кэшируется и прослеживается в течение дня - это означает, что ничего не сканируется (или, наоборот, кэшируется, когда сканирование разрешено). Например, Google сканирует файл robots.txt примерно один раз в день для большинства сайтов.

Джон Мюллер
источник
Я не вижу здесь никакой разницы между статическим или динамическим. Я бы также использовал динамическую часть, чтобы предлагать разные версии в соответствии с разными хостами, но поскольку все хосты совместно используют один и тот же физический каталог на сервере компьютера, это означает наличие robots1.txt, robots2.txt, robots3.txt (numbers то есть в какой области мы находимся).
Цезарь
Я не думаю, что динамика здесь означает, что они хотят каждый раз предоставлять разный контент. Они просто хотят включить его через PHP, чтобы принимать решения на основе имени хоста в коде PHP. Я часто делаю robots.txt динамическим, чтобы обслуживать разные правила для разных пользовательских агентов.
Стивен Остермиллер
2
Да, как я уже говорил, делать это для нескольких хостов - это все равно, что иметь отдельные файлы robots.txt на хост, что нормально. Однако иногда мы видим сайты, пытающиеся контролировать сканирование по времени суток с помощью динамического файла robots.txt - это вызывает много проблем.
Джон Мюллер
Хорошая точка зрения. Я отредактировал принятый ответ с предупреждением, чтобы не сделать robots.txt очень динамичным.
Стивен Остермиллер
0

Создавать sitemap.php не нужно, потому что: 1. Для каждого языка вы можете запустить отдельный файл sitemap.xml и указать каждый в консолях поисковой системы. 2. Стандартные файлы карты сайта можно регулярно переписывать, чтобы включить недавний контент, и это делает их динамичными - для этого .php не требуется. Механизм внутреннего обновления и cron воссоздают тот же файл со стандартным расширением .xml.

Файлы Sitemap.xml являются статическими, и только обновления делают их динамическими - они не обновляются в реальном времени. Это может быть причиной, чтобы заставить их переписывать каждую минуту, но в этом нет необходимости, потому что: 1. Google не проверит это менее чем за 1 час с момента последней отправки 2. Когда файлы карты сайта большие, переписывайте их часто производительность сервера будет капать.

Если объем данных большой, а размер файла Sitemap превышает 50 МБ, требуется система с несколькими файлами Sitemap. Это означает, что sitemap2,3 ... .xml будет добавлен в список основного файла, но содержимое в этих файлах также останется неизменным, пока эти файлы не будут воссозданы (например, cron).

Также стоит упомянуть, что как только поисковая система получит доступ к файлу, он не вернется к нему снова очень быстро (если это не сделано вручную). Это подтверждает, что в любом случае нет необходимости создавать обновление sitemap.php в режиме реального времени, потому что обычный sitemap.xml сам по себе может быть динамическим, обновляя новое содержимое в течение дня или недели.

Я не могу думать ни о каких профессионалах, использующих sitemap.php. Это не принесет пользы, так как есть другие лучшие / правильные способы использования этих файлов.

IGI
источник
Несколько причин могут быть динамическими: карты сайта занимают много места на диске, а динамическая генерация - ни одной. Файлы Sitemap должны постоянно обновляться, и динамические карты сайта могут быть простым способом сделать это.
Стивен Остермиллер