Чи можуть файли robots.txt та sitemap.xml бути динамічними через переадресацію .htaccess?


13

У мене є багатомовний та багатодоменний сайт. Він працює через унікальну установку CMS (Drupal), тому у мене є одна коренева директорія. Отже, якщо у мене є статичний robots.txt, там я можу лише показувати файли для одного домену, наскільки я знаю.

Чи можу я поставити рядок у .htaccess

Redirect 301 /robots.txt /robots.php

(або еквівалентну інструкцію. Будь ласка, вкажіть, яку, якщо це дозволено)

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

І те саме питання щодо sitemap.xml , тому я можу подати динамічний sitemap.php, який вказує різні посилання для кожного різного домену.

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


Відповіді:


12

Ви можете зробити будь-який файл динамічним. Найкращий спосіб зробити це не через переадресацію, а через правила перезапису.

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

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

Зверніть увагу , що навіть якщо ви дозволите його з PHP, якщо ваш robots.txt з'являється статична для кожного шукача для кожного домена. Чудово подавати різний вміст для різних доменів, або навіть для різних користувацьких агентів. Однак подання різного вмісту випадковим чином або залежно від часу доби може дійсно заплутати сканерів пошукових систем і зіпсувати ваше SEO.


Мапи сайту не можна називати, як тільки ви хочете. Ви можете переспрямувати їх або скористатися правилом переписання, щоб динамічно ввімкнути їх в одній URL-адресі. Ви також можете назвати їх на зразок

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-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 per-каталогу. Косий префікс підстановки (тобто /robots.php) в цьому випадку необов’язковий.
MrWhite

5

Так, будь-який запит може бути "динамічним".

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

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

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

RewriteEngine має відбуватися лише один раз (хоча це не має значення, якщо воно відбувається кілька разів).

Вам просто потрібно переконатися, що воно не суперечить жодним іншим директивам у вашому файлі .htaccess. Отже, це, мабуть, має бути майже перед початком файлу, безумовно, перед вашим переднім контролером .


4

Зробити динамічний файл Sitemap добре - це хороший спосіб автоматичного оновлення ваших мап сайту.

Зробити файл robots.txt динамічним (для одного і того ж хоста! Це робити для окремих хостів - це, по суті, лише звичайний файл robots.txt для кожного з них.), Можливо, спричинить проблеми: він не сканує щоразу, коли URL-адреса сканується з сайту. , тому може трапитися кешування "неправильної" версії. Наприклад, якщо ви змушуєте сканувати блок файлів robots.txt у робочий час, можливо, він кеширується та дотримується протягом дня - це означає, що нічого не скануватиметься (або поперемінно, кешується, коли сканування дозволено). Google сканує файл robots.txt приблизно один раз на день, наприклад, для більшості сайтів.


Я не бачу тут різниці серед статичного чи динамічного. Я також використовував би динамічну частину, щоб пропонувати різні версії залежно від різних хостів, але оскільки всі хости мають один і той же фізичний каталог на комп'ютерному сервері, це спосіб мати robots1.txt, robots2.txt, robots3.txt (числа значення в якому домені ми знаходимося).
Сезар

Я не думаю, що тут динаміка означає, що вони хочуть щоразу подавати різний контент. Вони просто хочуть живити його через 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 годину з моменту останнього надсилання. часто зробить продуктивність сервера kaput.

Коли є великий об'єм даних і він робить файл мапи більше 50 Мб, потрібна система з кількома картами сайту. Це означає, що sitemap2,3 ... .xml додаватиметься до списку головного файлу, але вміст у цих файлах також залишається виправленим до тих пір, поки ці файли не будуть відтворені (наприклад, cron).

Зазначимо також, що після того, як пошукова система отримала доступ до файлу, вона не повернеться до неї знову дуже швидко (якщо це не робиться вручну). Це підтверджує, що ні в якому разі не потрібно створювати оновлення sitemap.php в реальному часі, оскільки звичайний sitemap.xml сам по собі може бути динамічним, оновлюючи новий вміст протягом дня або тижня.

Я не можу придумати жодних плюсів за допомогою sitemap.php. Це не принесе користі, оскільки є інші кращі / правильні способи використання цих файлів.


Декілька причин можуть бути бажаними динамічними: Sitemap займає багато місця на диску, а динамічне генерування не займає жодної. Мапи сайту повинні бути в курсі останніх, і динамічні мапи сайту можуть бути простим способом зробити це.
Стівен Остерміллер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.