Страница 404 — выдаем правильные http заголовки

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

Я часто просматриваю свои проекты в Яндекс.Вебмастер. Смотрю ошибки, которые возникают и стараюсь их устранить.

Так меня недавно заинтересовало, что в списке проиндексированных страниц, Яндекс показывает главную страницу несколько раз. Тогда я задался вопросом о причине такого странного поведения.

Вначале я решил, что мой хостинг слабенький и не «тянет», когда поисковый робот за один раз пытается загрузить все страницы.

Страница 404

Я сменил хостера. Подождал немного, но это проблему не решило. Начал копать глубже и решил еще немного помочь серверу нового хостера. Для этого я прописал в файле robots.txt директиву Crawl-delay: 3. Она сообщает поисковым роботам, что грузить все страницы сайта за один раз не стоит, а перед загрузкой каждой следующей страницы надо подождать 3 секунды. Таким образом, при хорошей посещаемости сайта и одновременном обращении к нему поискового робота сервер перегружаться не будет. Эту директиву поддерживают только Яндекс, Гугл, к сожалению, ее игнорирует (и грузит сервер по полной).

К сожалению, ничего из выше перечисленного в проблеме двойного индексирования главной страницы сайта так и не помогло.

Меня даже взял какой-то азарт… Что это за проблема такая, что я не могу ее решить?

Страница 404

Почесывая затылок сидел и думал.

И тут меня осенило! Скорее всего, проблема в файле .htaccess. Посмотрел. Там оказались такие строки:

ErrorDocument 404 //ipmoney.info/
RewriteEngine On
RewriteCond %{HTTP_HOST} ^ipmoney\.info$ [NC]
RewriteRule ^(.*)$ //ipmoney.info/$1 [R=301,L]
Options All -Indexes

Вот оно! Строка

ErrorDocument 404 //ipmoney.info/

при возникновении ошибки 404 (нет документа) дает команду — отобразить содержимое файла //ipmoney.info/ (главную страницу). Я так сделал для того, чтобы при неправильном наборе адреса страницы вида /?p=имясошибкой или /имясошибкой всегда выводилась главная страница, для обоих случаев.

Страница 404

Вся заковырка оказалась в том, что в директиве я указал абсолютный адрес страницы. И при срабатывании механизма 404 ошибки фактически происходила переадресация с выдачей заголовка 302 (файл временно перенесен). Таким образом, поисковик, при обращении к несуществующей странице получал команду: этой страницы сейчас нету, лучше посмотри главную. И конечно же индексировал повторно (а иногда и чаще) морду этого блога. Тем самым понижая ее в выдаче из-за дублирования контента.

Я переписал строку

ErrorDocument 404 //ipmoney.info/

на

ErrorDocument 404 /?p=01

По идее теперь должно было все работать правильно. Но как проверить? Опять ждать очередной индексации? Долго и нецелесообразно.

Страница 404

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

Работать с ним очень просто и понятно. Для проверки правильности своих предыдущих действий ввел такой список урлов:
//ipmoney.info
//ipmoney.info/?p=500
//ipmoney.info/123/123
//ipmoney.info

Получил ответ:
200
200
404
301

Просто не представляете какое это облегчение! Все правильно.

Страница 404

Если не понятно зачем нужны строки

RewriteCond %{HTTP_HOST} ^ipmoney\.info$ [NC]
RewriteRule ^(.*)$ //ipmoney.info/$1 [R=301,L]

читайте о сохранении ссылочной популярности.