Предлагаемое расширение стандарта robots.txt

M
На сайте с 25.01.2001
Offline
57
23319

Сейчас в отделе поисковых систем активно обсуждается небольшое расширение стандарта robots.txt, связанное с зеркалами.

Суть состоит в появлении еще одного поля - Host, в котором указывается основное зеркало.

Это расширение уже добавлено в наш help:

http://www.yandex.ru/info/webmaster2.html#virtual

Что уважаемый All думает по этому поводу?

Для затравки предлагаю свою короткую переписку с Martijn Koster.

M
На сайте с 25.01.2001
Offline
57
#1

Hello Martijn!

I'm one of the developers of Russian search engine, Yandex (www.yandex.ru). For the reasons of

maintaining our robot's indexing speed fast, search database clean, and correct link popularity

calculation we have a database of mirror hosts.

When you have a number of mirrors, you'll have to choose one of them as a main. The fact is that no

algorithm of automatic choice can guess what any particular webmaster really thinks to be the main

mirror of his site.

The best solution for the webmaster is to disallow indexing of all the secondary mirrors with

robots.txt:

User-agent: *

Disallow: /

- but there are problems with virtual hosts and 'domain name parking' to somebody else's IP's. Most

of

the people have difficulties even with this SSI example for Apache servers:

<!--#if expr=" \"${HTTP_HOST}\" != \"www.main_name.ru\" " -->

User-Agent: *

Disallow: /

<!--#endif -->

For that reason we are about to introduce an extension to robots.txt, the 'Host:' field. I'll try to

explain what we've decided. Is there anything that is very wrong?

The idea is simple: webmaster can disallow all the addresses except his main mirror with a single host directive.

User-Agent: *

Disallow: /forum

Disallow: /cgi-bin

Host: www.myhost.ru

The value for HOST field is not host indeed, but a network location, i.e. host:port, where port=80 is

assumed by default. If our robot somehow does not recognize this value as a correct location (i.e.

host name violates RFC 952, 921, etc. or port=0, or the top level domain of the host name doesn't

exist), it ignores the line. Also, multiple Host lines are allowed.

If there is at least one correct Host line in the record, our robot matches current host name and port

with each (correct) Host line. If none of them match, it implies "Disallow: /" line at the end of the

record (otherwise, it does nothing).

M
На сайте с 25.01.2001
Offline
57
#2

On Fri, 2003-01-10 at 18:46, Alexander Melkov wrote:

> The best solution for the webmaster is to disallow indexing of all the secondary mirrors with

> robots.txt:

> User-agent: *

> Disallow: /

I don't agree. There is value in robots indexing the mirrors,

so that the mirrors can be found, and so that the resulting load

can be shared across servers.

I think a better solution is to use a LINK tag that allows

a document to define some other document as its "original".

Then your robot could verify that, and decide how to display

it, say by listing the original first, and copies below it.

Or if you didn't want to be that comprehensive, you could

just follow that link tag, and index only the original instead.

No such LINK tag "rel" attribute exists at the moment, but:

- any HTML author can add it, without having to be webmasters

(or programmers)

- adding it doesn't break any existing standard.

- the w3c is presumably quite in favour of LINK

- there is a process of having this adopted as a W3C

recommendation, that people might actually pay attention to.

> - but there are problems with virtual hosts and 'domain name parking' to somebody else's IP's. Most of

> the people have difficulties even with this SSI example for Apache servers:

> <!--#if expr=" \"${HTTP_HOST}\" != \"www.main_name.ru\" " -->

> User-Agent: *

> Disallow: /

> <!--#endif -->

This sounds like it would achieve what you propose, and is easily

ported to cgi/php/servlets whatever.

If you mean that some people have difficulty applying this to

their server (because they don't have administrative control,

technical know-how, or a server platform that supports it),

then that's more a problem with their servers -- if they

want this, they should make it happen.

> For that reason we are about to introduce an extension to robots.txt, the 'Host:' field. I'll try to

> explain what we've decided. Is there anything that is very wrong?

>

> The idea is simple: webmaster can disallow all the addresses except his main mirror with a single host

> directive.

> User-Agent: *

> Disallow: /forum

> Disallow: /cgi-bin

> Host: www.myhost.ru

>

> The value for HOST field is not host indeed, but a network location, i.e. host:port, where port=80 is

> assumed by default. If our robot somehow does not recognize this value as a correct location (i.e.

> host name violates RFC 952, 921, etc. or port=0, or the top level domain of the host name doesn't

> exist), it ignores the line. Also, multiple Host lines are allowed.

>

> If there is at least one correct Host line in the record, our robot matches current host name and port

> with each (correct) Host line. If none of them match, it implies "Disallow: /" line at the end of the

> record (otherwise, it does nothing).

Some comments:

- This doesn't help you with mirrors you don't control --

if a 3rd party copies your documents, without the robots.txt file,

then these copies still get indexed. (With the LINK idea

this isn't a problem).

- people will be confused by this; they're already confused

enough (by where to put the file, how records are separated,

how the pattern matching works etc).

- you're not going to get all robots to adopt this just because

you do, and having lots of inconsistent extensions to the

robots.txt doesn't help anyone.

- As you say, a server can already change its rules based on

the hostname used. Adding additional mechanisms then seems

somewhat superfluous.

- New fields in robots.txt may well cause some robots to break.

- I am no longer involved with robots, and have no interest

in extending the robots.txt standard. The HTML 4 spec

mentions robots.txt, so the W3C is probably the best organisation

to take it forward.

Personally I think this feature would only adress the problems

of very few people, in an in-adequate way, while complicating

the life all other webmasters (and robot writers) in the world,

and cause interoperability problems. So, no, I don't support it.

Regards,

-- Martijn

AiK
На сайте с 27.10.2000
Offline
257
AiK
#3

Идея хорошая, но реализация кривая - в этом я полностью согласен с Мартином.

Как вариант:


User-Agent: Yandex
Disallow: www.myhost.ru/forum
Disallow: www.myhost.ru/cgi-bin

На мой взгляд это более понятно, плюс явно относится только к роботу Яндекса, сл-но другие роботы это просто проигнорируют.

M
На сайте с 25.01.2001
Offline
57
#4

AiK, никто же не мешает написать "User-agent: Yandex" в группе с директивой Host :).

Кроме того, в Ваше предложение точно неприемлемо:

1) Оно нарушает стандарт robots.txt. Директива disallow трактуется однозначно.

Заметьте, что роботы, следующие стандарту, строчку, начинающуюся с 'Host', должны попросту игнорировать.

2) Оно не позволит запретить зеркало, о котором Вы не знаете (кто-то "запарковал" свой ненужный хост на Ваш IP).

AiK
На сайте с 27.10.2000
Offline
257
AiK
#5
Оно нарушает стандарт robots.txt.

Как и Ваше :)

Неправильно оформленную строку парсер пропустит, а вот пропустит ли он дополнительную строку _внутри_ - не уверен.

Сентенцию насчёт парковки не понял. Видимо из-за того, что у меня домен виртуальный :)

M
На сайте с 25.01.2001
Offline
57
#6

> Как и Ваше

Наше расширение _не_ нарушает стандарт. То, что там ясно сказано об игнорировании незнакомых директив, и является местом, позволяющим данное расширение.

Повторюсь, об изменении трактовки "знакомых" директив не может быть и речи. Это более обсуждать не стоит.

> он дополнительную строку _внутри_ - не уверен

Согласно стандарту - должен пропустить. Правда, практика показывает, что у значительного числа людей возникают трудности с чтением стандарта. Именно поэтому 'Host' и рекомендуется писать в конце записи.

> Видимо из-за того, что у меня домен виртуальный

Значит, поняли.

AiK
На сайте с 27.10.2000
Offline
257
AiK
#7
Значит, поняли.

Спасибо за идею :D

Согласно стандарту - должен пропустить.

Ок. Допустим, я хочу запретить только www.mysite.spb.ru (Яндекс правда итак с этим разберётся, но не суть).

Что будет, если я напишу, так как Вы и предлагали?:


User-Agent: *
Disallow: /
Host: www.mysite.spb.ru

Правильно, я закрою сайт mysite.spb.ru (и www.mysite.spb.ru, коль скоро он возвращает тот же robots.txt) для всех роботов, кроме робота Яндекса. Поэтому предлагаю во избежание путаницы всё же на странице

http://www.yandex.ru/info/webmaster2.html#virtual заменить * на Yandex.

Рекомендация для тех, кто решит воспользоваться Яндексовским расширением: размещайте дерективы для Яндекса в самом конце robots.txt во избежание неприятностей с роботами других поисковиков.

Повторюсь, об изменении трактовки "знакомых" директив не может быть и речи. Это более обсуждать не стоит.

Непонятно почему. Или Яндекс всегда идёт своим путём? Гугль же ввёл звёздочку и особо не перживает о том, что какой-то робот эту звёздочку не поймёт - если директива относится только к конкретному поисковику, то остальных это и не касается.

F
На сайте с 15.11.2000
Offline
116
#8

Спасибо, что снова подняли эту тему. Я почти год назад писал на форуме Яндекса предложение ввести отдельный файл, который бы регулировал поведение робота относительно проблемы зеркал. Назовем его условно mirrors.txt.

Во-первых, он не конфликтует с robots.txt и не вызывает путаницы. Во-вторых, этим файлом можно указать не только перечень индексируемых зеркал, но и полный перечень зеркал с указанием главного. Зачем? Зеркала могут быть частичными (скажем, для одного раздела), либо страницы могут отличаться какими-то небольшими деталями, и сайты уже не будут распознаны как зеркала. Если же содержание файлов mirrors.txt на двух и более серверах идентично (т.е. это не подложный mirrors), значит, все второстепенные зеркала можно не индексировать (если главное нормально доступно).

С уважением,

Александр Садовский.

M
На сайте с 25.01.2001
Offline
57
#9

AiK, Вы что-то не понимаете.

Host: www.mysite.spb.ru

запрещает всех, кроме www.mysite.spb.ru.

Об этом же ясно написано и в приведенной ссылке, и в процитированных письмах.

Ну а приведенный Вами robots.txt вообще все для всех запрещает, т.к. директива Host имеет тоже только запретительный характер, и не отменяет директив disallow.

> Гугль же ввёл звёздочку

Что-то я не заметил. Пожалуйста, дайте ссылку на то место, где это написано. А то вот в их хелпе только ссылки на www.robotstxt.org

> Или Яндекс всегда идёт своим путём

Это Вы следование стандарту называете "своим путем"? 😮

funsad, лишний файл - это уж слишком :).

>Зеркала могут быть частичными

На самом деле, не совсем понятно, зачем считать зеркалами то, что зеркалами не является.

Для склейки ИЦ? Со временем, подумав, можно просто прийти к "склейке" сайта, на котором лежит robots.txt, с сайтом, на который указывает директива Host. На первый взгляд, обмануть поисковую систему таким образом не удастся, поскольку хосты, запрещенные при помощи 'Host', индексироваться-то не смогут.

F
На сайте с 15.11.2000
Offline
116
#10
Как писал melkov
лишний файл - это уж слишком :).

Почему же? Все, что уменьшает путаницу, хорошо.

Есть и мелкие бонусы -- что может быть приятней для саппорта, чем отписать нерадивому веб-мастеру: "нечего на mirror.txt пенять, коли руки кривые". :)

На самом деле, не совсем понятно, зачем считать зеркалами то, что зеркалами не является.

Простой пример. Был у меня сайт на бесплатном хостинге, переехал на платный. Вначале Яндекс распознал его как зеркало. Но по мере того, как новый сайт обновлялся и рос, у Яндекса было все меньше уверенности в правильности своих выводов. В результате сейчас он расклеил их снова. Удалять же старый сайт не хочу, потому что на него много ссылок по сети. Поддерживать оба сайта в идентичном состоянии не получается, потому что на бесплатном хостинге нет ни SSI, ни PHP. Что тут делать?

С уважением,

Александр Садовский.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий