После переезда на свой хостинг и на новый движок WordPress, я стал ждать индексации в поисковиках. Через пару дней некоторые страницы уже были в индексе Google и почти все страницы в Яндексе, через который в первые же дни начали приходить первые посетители. Прошла неделя и сайт выпал из Яндекса. Намертво. Осталась только главная страница, и то в поиске она была «проиндексирована по ссылке», и вместо заголовка отображался url. Я задумался, не помогло. Тогда, решив, что просто сначала сайт был проиндексирован «быстроботом» Яндекса, я успокоился и стал ждать, пока попаду в основной индекс… Через пару дней абсолютно случайно я заметил, что при обращении к сайту возвращается ответ не 200, типа все OK, а 301, который означает, что сайт переехал. Причем, если обратиться к http://delphiblog.ru/, то новое место сайта оказывается тоже http://delphiblog.ru/. Я сразу обратился в саппорт хостинга. Мне оперативно подтвердили, что да, возвращается 301, смотрите скрипты на сайте.
Я провел маленький эксперимент: проверил, какой ответ возвращается при обращении к статичному файлу на сайте, delphi.jpg. Ответ был 200. Оказалось, что дело в WordPress: при обращении к любому разделу блога выдавало 301, как с www, так и без. После скармливания признаков гуглю, выяснилось, что такая проблема не только у меня, и, судя по всему, проявлялась она только в некоторых случаях при использовании WordPress 2.3 с включенными ЧПУ. Причем Google без проблем индексировал сайт, но для русских поисковиков нужно было как то исправлять ситуацию.
Решения проблемы в Интернете я не нашел, так что пришлось разбираться самому. После нескольких неудачных попыток поиграть с редиректами в WordPress и содержимым файлов robots.txt и .htaccess, я решил действовать «в лоб».
1) Полностью отключил 301 редиректы в WordPress.
Для этого в файле wordpress/wp-includes/canonical.php я закомеентировал строчку
wp_redirect($redirect_url, 301);
2) Изменил файл .htaccess:
DirectoryIndex index.php index.html RewriteEngine On Options +FollowSymlinks RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.delphiblog\.ru
RewriteRule ^(.*)$ http://delphiblog.ru/$1 [R=301,L]RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Выделенные строчки отвечают за перенаправление с адресов вида http://www.delphiblog.ru/что-то-там на http://delphiblog.ru/что-то-там.
3) Изменил файл robots.txt:
User-agent: * Disallow: /wp-includes Disallow: /wp-admin Disallow: /wp-content/plugins Disallow: /wp-content/cache Disallow: /wp-content/themes Disallow: /wp-login.php Disallow: /wp-register.php
Host: delphiblog.ru
Выделенная строчка указывает поисковикам (Google её, насколько я знаю, игнорирует), что основным сайтом надо считать delphiblog.ru, а не www.delphiblog.ru.
В итоге получилось следующее: при обращении к http://delphiblog.ru/ возвращается 200. http://www.delphiblog.ru/ – возвращается 301-й редиректит на сайт без www. Через сутки главная страница уже появилась в индексе Яндекса с нормальным описанием. Теперь осталось дождаться апа выдачи:)
Я понимаю, что это решение далеко не идеально, и все 301 редиректы убирать из WordPress не есть гуд, но пока я не нашел точного решения проблемы, пришлось применить эти «драконовские» меры. Надеюсь, кому-то этот пост окажется полезным, а может кто-то подскажет, в каком именно месте происходят эти «нехорошие» редиректы.
Добавлено 22.03.2008:
Кажется, найдено решение получше: в файле functions.php нужно добавить строчку
remove_action(‘template_redirect’, ‘redirect_canonical’);
В принципе, этого достаточно, чтобы сайт возвращал ответ 200, но я бы все же добавил выделенные выше строчки в .htaccesss, чтобы делать redirect на сайт без www с сайта с www.
Иван Ширко
ishyrko@gmail.com