Як я можу використовувати robots.txt лише для заборони субдомена?


10

Моя база коду поділяється між кількома середовищами (live, staging, dev) та піддоменами ( staging.example, dev.exampleі т. Д.), І лише два можна дозволити сканувати (тобто. www.exampleІ example). Зазвичай я можу змінювати /robots.txtта додавати Disallow: /, але через спільну базу коду я не можу змінювати, /robots.txtне впливаючи на всі (під) домени.

Будь-які ідеї, як це зробити?

Відповіді:


13

Ви можете обслуговувати інший robots.txtфайл на основі піддомену, через який було доступно на сайті. Один із способів зробити це на Apache - це внутрішнє перезапис URL-адреси за допомогою mod_rewrite в .htaccess. Щось на зразок:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^robots\.txt$ robots-disallow.txt [L]

Вище сказано, що для всіх запитів, robots.txtде хост є чимось, крім www.example.comабо example.com, внутрішньо перепишіть запит на robots-disallow.txt. І robots-disallow.txtбуде містити Disallow: /директиву.

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


Я думав про те саме рішення. Я не був впевнений, чи є щось інше там, але наприкінці дня, якщо це так, то те, що буде робити мою роботу)
alexus

1
Якщо обидва субдомена / хости вказують на ту саму саму базу веб-простору / коду, у robots.txt "стандарт" немає нічого, що може контролювати це, якщо саме це ви пропонуєте. Бот просто збирається просити запит sub.example.com/robots.txt, тому вам потрібно буде щось зробити, щоб подати іншу відповідь залежно від субдомену. Вам не потрібно використовувати mod_rewrite, але це техніка, яку я бачив, як я використовував кілька разів. Якщо robots.txtдинамічно генерується, то ви можете змінити відповідь у коді на стороні сервера (наприклад, PHP).
MrWhite

Альтернативою для використання robots.txtможе бути запобігання індексації, а не сканування, шляхом надсилання X-Robots-Tag: noindexзаголовка відповіді HTTP, коли доступ до таких субдоменів (що також можна зробити в .htaccess). Хоча я думаю, що запобігання повзання, мабуть, є кращим. (?)
MrWhite

1

robots.txt працює лише за наявності в корені.

Вам потрібно завантажити окремий robots.txtвеб-сайт для кожного піддомену, звідки можна отримати доступ до нього http://subdomain.example.com/robots.txt.

Додайте код нижче в robots.txt

User-agent: *
Disallow: /

І ще один спосіб - ви можете вставити <META>тег Robots на всі сторінки.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">

3
Але в ОП вже зазначено: "Зазвичай я б змінював /robots.txtі додавав Disallow: /, але через спільну базу коду я не можу змінювати, /robots.txtне впливаючи на всі (під) домени".
MrWhite

0

Я б видалив метатег зі сторінки html та динамічно будував його залежно від вашого піддомену. наприклад, ми використовуємо піддоменний розробник. для розвитку. Отже, у події завантаження сторінки у нас є таке:

  ' Check if domain is DEV or PROD and set robots accordingly meta tag in head
  Dim metatag As HtmlMeta = New HtmlMeta
  metatag.Attributes.Add("name", "robots")
  If CurrentURL.Contains("dev.advertise-it") Then
    metatag.Attributes.Add("content", "NOINDEX, NOFOLLOW")
  Else
    metatag.Attributes.Add("content", "INDEX, FOLLOW")
  End If
  Page.Header.Controls.Add(metatag)

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