Делаем правильные HTTP заголовки 404
Идея не заставился себя долго ждать. Возможно, подумал я, проблема в файле htaccess Открыл его и кое что начало проясняться ErrorDocument 404 ipmoney.info
Для вас уже далеко не секрет, что у меня имеются несколько проектов в Сети. По мере необходимости я исправляю ошибки, да и просто наблюдаю за ними в Яндекс.Вебмастере. Всегда лучше перестраховаться заранее, чем обнаружить сбой в неподходящее время.
Недавно мое внимание снова привлек Яндекс. На этот раз в списке проиндексированных страниц он показывал несколько раз главную. Я задался тогда вопросом: в чем же причина такого странного отображения?
Недоумевая о ситуации, я было подумал, что у меня недостаточно сильный хостинг, чтобы «тянуть» ресурсы и поисковый робот из-за этого не справляется с загрузкой всех страниц. Поэтому я решил сменить хостера и, немного подождав, не обнаружил каких-либо сдвигов. Проблема осталась на том же месте.
Было принято решение работать с кодом, обеспечив сервер нового хостера меньшими требованиями к скорости. Открыв файл robots.txt, я вставил важную для этого процесса директиву Crawl-delay: 3. С помощью нее поисковые роботы не загружают все страницы ресурса одновременно, а распределяют команду между страницами с интервалом в 3 секунды.
Такую директиву возможно реализовать только с поисковиком Яндекс. К сожалению, Google ее попросту не замечает и загружает ресурс полностью. Иными словами, если ваш сайт имеет высокий индекс посещаемости, сервер не будет перегружен. Увы, но и в этот раз вопрос дуального индексирования главной страницы не исчерпал себя.
Хорошо, это начинает быть интересным, подумал я в тот момент. Неужели ситуация настолько безвыходная, что я не смогу ее решить? В такие моменты начинаешь понимать, что азарт и решение головоломки — это краеугольный камень, помогающий не останавливаться на достигнутом.
Идея не заставился себя долго ждать. Возможно, подумал я, проблема в файле .htaccess. Открыл его и кое что начало проясняться:
ErrorDocument 404 https://ipmoney.info/ RewriteEngine On RewriteCond %{HTTP_HOST} ^ipmoney\.info$ [NC] RewriteRule ^(.*)$ https://ipmoney.info/$1 [R=301,L] Options All -Indexes
Это оно! Читаем строчку:
ErrorDocument 404 https://ipmoney.info/
Дело заключалось в том, что когда возникала ошибка 404 (нет документа), ресурс переадресовывает пользователя на главную страницу https://ipmoney.info/. Именно так было задумано мной для того, чтобы страницы вида «/имя-с-ошибкой», т.е. неправильно набранные, выводили главную страницу сайта.
Догадались? Главный момент заключался в директиве, где был указан абсолютный адрес веб-страницы. Поэтому алгоритм 404 ошибки провоцировал переадресацию и выдачу 302 заголовка, обозначающего временный перенос файла.
Иными словами, поисковая машина обращалась к изъятой странице и получала команду: направляйся на главную, пока этой страницы нет на сервере. Главная страница индексировалась повторно, выдавая лицо блога, там самым снижая ее выдачу из-за дубликата.
Затем я заменил строку следующего кода:
ErrorDocument 404 https://ipmoney.info/
на
ErrorDocument 404 /?p=01
Ожидать новой индексации было бы долго, а проверка требовалась именно сейчас. По идее, код был исправлен и ресурс должен был работать правильно, но действовать надо было уже сейчас.
Надо было найти сервис, проверяющий заголовки сайта, когда тот отвечает на запросы к разным страницам. В итоге такой сервис был найден, хотя это составило еще того труда и стаканчика хорошего кофе.
Оказалось, работать с ним приятно и просто — я ввел следующий список «урлов», чтобы проверить правильность собственных действий:
https://ipmoney.info https://ipmoney.info/?p=500 https://ipmoney.info/123/123 https:////ipmoney.info
Ответ был таков:
200
200
404
301
Да, я сделал это! Облегчение и удовлетворенность расслабили мое тело и разум — все верно.
Впрочем, если эти строки кода до сих пор представляются вам чем-то загадочным
Если не понятно зачем нужны строки
RewriteCond %{HTTP_HOST} ^ipmoney\.info$ [NC] RewriteRule ^(.*)$ https://ipmoney.info/$1 [R=301,L]
советую почитать о сохранении ссылочной популярности.