обнаружил еще одну причину по которой сайт может не индексироваться яндексом

stealthy
На сайте с 15.06.2006
Offline
69
1089

Если индексатор яндекса просит контент по протоколу HTTP/1.1 а ему в ответ уходит HTTP/1.0 (что не противоречит RFC и спокойно проглатывается другими поисковиками) - яндекс индексировать сайт не будет.

Проблема засечена на IIS, который без определенных ключей в реестре может ломать выходящие с сайтов заголовки принудительно проставляя HTTP/1.0.

Технические причины подобного поведения сервера нужно смотреть в каждом случае отдельно, но для тех кто пользует ActivePerl в ISAPI варианте (естественно под IIS) - я написал пост на selectcms.ru, поскольку тут это будет мало кому интересно (Perl-овщиков мало).

Twilight CMS (http://www.twl.ru): есть Free версия, очень проста и удобна в использовании. Консультирую по любым вопросам. Новый спорт - практическая стрельба (http://nikit.in) - не для офисного планктона.
Dwarf
На сайте с 06.10.2004
Offline
60
#1

Думается, тут дело не в версии протокола, а в content-type.


C:\>perl -v
This is perl, v5.8.7 built for MSWin32-x86-multi-thread

Ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlIS\EnableCGIHeader по умолчанию отсутствует, но по поведению скриптов он =1.

Тест под Windows 2000 server:


#test.plx
print "Content-Type: text/html\n\n";
print "test";

1. EnableCGIHeader - отсутствует (или = 1)

в бродилке:


test

заголовки


HTTP/1.x 200 OK
Date: Fri, 13 Apr 2007 06:46:19 GMT
Server: Microsoft-IIS/5.0
Content-Type: text/html

2. EnableCGIHeader = 0

в бродилке:


Content-Type: text/html

test

заголовки


HTTP/0.9 200 OK

Что и следовало ожидать - если выключаете заголовки, делайте их сами :)

Но при отсутствии ключа в реестре они включены.

PS. На вашем в блоге в файрфоксе ссылки "читать полностью" не нажимаются - перекрыты каким-то слоем, вероятно %)

/updated/

Yandex-I - один из немногих ботов, который передает хедер Accept. Вот такой:


Accept: text/html, application/pdf;q=0.1, application/rtf;q=0.1, text/rtf;q=0.1, application/msword;q=0.1, application/x-shockwave-flash;q=0.1, application/vnd.ms-excel;q=0.1, application/vnd.ms-powerpoint;q=0.1
Accept-Language: ru, uk, be, en, *;q=0.01
Connection: Keep-Alive
Host: site.ru
User-Agent: Yandex/1.01.001 (compatible; Win16; I)
If-Modified-Since: Mon, 01 Aug 2005 23:35:46 GMT
From: webadmin@yandex.ru

и в этом случае вполне может получать вместо 200 OK - 406 Not Acceptable

Деревянные окна (http://www.wood-win.ru/)
stealthy
На сайте с 15.06.2006
Offline
69
#2

Да в том то и дело что вроде бы не в Content-type, его перелопатили давно. Проблема не в отстутствии ключа в реестре, с этим все понятно, поведение действительно как =1. Проблема в том, что при этом ключе HTTP/1.1 выдаваемое вручную будет переписано поверх! А об этом нигде не сказано.

Собственно сама ситуация не важна, как заголовки формируются. Важно, что робот не кушает страницы если ему отвечают HTTP/1.0 в ответ за запрос.

PS: То что яндексу можно 406 выдать это занятно, но вопрос только в том как он это интерпретирует. Сомневаюсь, что он будет делать перезапрос с другими параметрами. Негибкий он какой-то. Без Date тоже может страницы не есть. С неправильным Content-length ничего не ест. И так далее. При этом все другие боты менее жестки в требованиях - интернет бывает разный, чего не встретится только на его просторах.

Dwarf
На сайте с 06.10.2004
Offline
60
#3
stealthy:
Да в том то и дело что вроде бы не в Content-type, его перелопатили давно. Проблема не в отстутствии ключа в реестре, с этим все понятно, поведение действительно как =1. Проблема в том, что при этом ключе HTTP/1.1 выдаваемое вручную будет переписано поверх! А об этом нигде не сказано.

Earlier versions of Perl for ISAPI did not output headers correctly, and this caused Perl for ISAPI scripts to misbehave. You could work around this in earlier versions of PerlIS by sending the headers at the beginning of your script like this:

print <<"END";

HTTP/1.0 200 OK

Content-Type: text/html

END

This is no longer necessary with the current version of Perl for ISAPI, as Perl for ISAPI sends the correct headers. The Registry value that governs this is EnableCGIHeader, a REG_DWORD value that is set to 1 by default. This value is stored under the Registry key HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlIS. If you need to turn off the automatic generation of the header, set this value to 0.

stealthy:
Собственно сама ситуация не важна, как заголовки формируются. Важно, что робот не кушает страницы если ему отвечают HTTP/1.0 в ответ за запрос.

У меня на всех серверах HTTP/1.1 - там практически везде host-based виртуальные хосты, которые по HTTP/1.0 недоступны как класс (хедер Host - это HTTP/1.1). Все кушает нормально.

stealthy:
PS: То что яндексу можно 406 выдать это занятно, но вопрос только в том как он это интерпретирует. Сомневаюсь, что он будет делать перезапрос с другими параметрами. Негибкий он какой-то. Без Date тоже может страницы не есть. С неправильным Content-length ничего не ест. И так далее. При этом все другие боты менее жестки в требованиях - интернет бывает разный, чего не встретится только на его просторах.

Ну как он может интерпретировать 406? Как все 40х статусы - не индексирует и все. На форуме была тема по этому поводу - апач с MultiViews возвращал 406.

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