Страница 404 — выдаем правильные http заголовки
Решил поискать сервис, который может проверить заголовки, отдаваемые сайтом при обращении к разным страницам. В итоге я накапал подходящий сервис для проверки заголовков
Я часто просматриваю свои проекты в Яндекс.Вебмастер. Смотрю ошибки, которые возникают и стараюсь их устранить.
Так меня недавно заинтересовало, что в списке проиндексированных страниц, Яндекс показывает главную страницу несколько раз. Тогда я задался вопросом о причине такого странного поведения.
Вначале я решил, что мой хостинг слабенький и не «тянет», когда поисковый робот за один раз пытается загрузить все страницы.
Я сменил хостера. Подождал немного, но это проблему не решило. Начал копать глубже и решил еще немного помочь серверу нового хостера. Для этого я прописал в файле robots.txt директиву Crawl-delay: 3. Она сообщает поисковым роботам, что грузить все страницы сайта за один раз не стоит, а перед загрузкой каждой следующей страницы надо подождать 3 секунды. Таким образом, при хорошей посещаемости сайта и одновременном обращении к нему поискового робота сервер перегружаться не будет. Эту директиву поддерживают только Яндекс, Гугл, к сожалению, ее игнорирует (и грузит сервер по полной).
К сожалению, ничего из выше перечисленного в проблеме двойного индексирования главной страницы сайта так и не помогло.
Меня даже взял какой-то азарт… Что это за проблема такая, что я не могу ее решить?
Почесывая затылок сидел и думал.
И тут меня осенило! Скорее всего, проблема в файле .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 ошибки фактически происходила переадресация с выдачей заголовка 302 (файл временно перенесен). Таким образом, поисковик, при обращении к несуществующей странице получал команду: этой страницы сейчас нету, лучше посмотри главную. И конечно же индексировал повторно (а иногда и чаще) морду этого блога. Тем самым понижая ее в выдаче из-за дублирования контента.
Я переписал строку
ErrorDocument 404 //ipmoney.info/
на
ErrorDocument 404 /?p=01
По идее теперь должно было все работать правильно. Но как проверить? Опять ждать очередной индексации? Долго и нецелесообразно.
Решил поискать сервис, который может проверить заголовки, отдаваемые сайтом при обращении к разным страницам. Я даже не представлял, что поиск может оказать таким сложным. Не буду описывать как все происходило, но в итоге я накапал подходящий сервис для проверки заголовков.
Работать с ним очень просто и понятно. Для проверки правильности своих предыдущих действий ввел такой список урлов:
//ipmoney.info
//ipmoney.info/?p=500
//ipmoney.info/123/123
//ipmoney.info
Получил ответ:
200
200
404
301
Просто не представляете какое это облегчение! Все правильно.
Если не понятно зачем нужны строки
RewriteCond %{HTTP_HOST} ^ipmoney\.info$ [NC] RewriteRule ^(.*)$ //ipmoney.info/$1 [R=301,L]
читайте о сохранении ссылочной популярности.