Проблема с 301 редиректом и WordPress или Почему не индексирует Яндекс

    После переезда на свой хостинг и на новый движок WordPress, я стал ждать индексации в поисковиках. Через пару дней некоторые страницы уже были в индексе Google и почти все страницы в Яндексе, через который в первые же дни начали приходить первые посетители. Прошла неделя и сайт выпал из Яндекса. Намертво. Осталась только главная страница, и то в поиске она была «проиндексирована по ссылке», и вместо заголовка отображался url. Я задумался, не помогло. Тогда, решив, что просто сначала сайт был проиндексирован «быстроботом» Яндекса, я успокоился и стал ждать, пока попаду в основной индекс… Через пару дней абсолютно случайно я заметил, что при обращении к сайту возвращается ответ не 200, типа все OK, а 301, который означает, что сайт переехал. Причем, если обратиться к https://zavsoft.ru/, то новое место сайта оказывается тоже https://zavsoft.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
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.delphiblog\.ru
RewriteRule ^(.*)$ https://zavsoft.ru/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Выделенные строчки отвечают за перенаправление с адресов вида http://www.zavsoft.ru/что-то-там на https://zavsoft.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: zavsoft.ru

Выделенная строчка указывает поисковикам (Google её, насколько я знаю, игнорирует), что основным сайтом надо считать zavsoft.ru, а не www.zavsoft.ru.

В итоге получилось следующее: при обращении к https://zavsoft.ru/ возвращается 200. http://www.zavsoft.ru/ – возвращается 301-й редиректит на сайт без www. Через сутки главная страница уже появилась в индексе Яндекса с нормальным описанием. Теперь осталось дождаться апа выдачи:)

    Я понимаю, что это решение далеко не идеально, и все 301 редиректы убирать из WordPress не есть гуд, но пока я не нашел точного решения проблемы, пришлось применить эти «драконовские» меры. Надеюсь, кому-то этот пост окажется полезным, а может кто-то подскажет, в каком именно месте происходят эти «нехорошие» редиректы.

Добавлено 22.03.2008:

Кажется, найдено решение получше: в файле functions.php нужно добавить строчку

remove_action(‘template_redirect’, ‘redirect_canonical’);

В принципе, этого достаточно, чтобы сайт возвращал ответ 200,  но я бы все же добавил выделенные выше строчки в .htaccesss, чтобы делать redirect на сайт без www с сайта с www.

 Иван Ширко
ishyrko@gmail.com

65 Replies to “Проблема с 301 редиректом и WordPress или Почему не индексирует Яндекс”

  1. Спасибо за методю. Искал плагин карты сайта для блога, случайно напаролся на этот пост, и ужаснулся! Все мои блоги на ВП выдавали 301 редирект… поправил с помощью вашего метода. Кстати весьма странно что не у всех этп проблема… Вопрос а почему это не самый лучший метод ? Какие проблемы, могут возникнуть. Жду развития событий и самого лучшего метода. Ещё раз спасибо.

  2. Я рад, что этот пост помог. Насчет проблем метода: например, при изменении ссылки на пост при переходе на старую ссылку не будет редиректа на новую, еще в некоторых случаях не будет редиректа. Но найдено лучшее решение:в файле functions.php добавить строчку remove_action(’template_redirect’, ‘redirect_canonical’);

  3. А можно по подробней, куда добавить и что сделать со старыми изменениями ? спасибо

  4. Можно) В админке открыть редактор тем, выбрать файл functions.php и первой строчкой добавить remove_action(’template_redirect’, ‘redirect_canonical’); Сохранить. Со старыми изменениями: в файле canonical.php раскомментировать строку wp_redirect($redirect_url, 301); Я у себя сделал так, вроде возвращается ответ 200

  5. Иван, спасибо! =) Я подозревал, что именно так, но решил удостовериться, ибо чайник. =)

  6. В таких вещах лучше быть уверенным, а то одна неверная строчка может остановить работу всего сайта)

  7. Иван, а как вообще убрать 301-й редирект? У иеня гугл проиндексировал с www а яндекс без, поэтому хочу чтобы нормально работал и не редиректил wordpress

  8. Чтобы отключить редирект с www, можно в functions.php первой строкой написать remove_action(‘template_redirect’, ‘redirect_canonical’);

  9. Если делать наоборот основным адрес с WWW, то при изменении строк пункта 2 на: DirectoryIndex index.php index.html RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_HOST} ^delphiblog\.ru RewriteRule ^(.*)$ http://www.zavsoft.ru/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] Блог начинает сам себя редиректит ьна индексную страницу бесконечно… Что не так, не подскажете?

  10. RewriteCond %{HTTP_HOST} ^domen\.ru$ [NC] RewriteRule ^(.*)$ http://www.domen.ru/$1 [R=301,L] Попробуйте те 2 строчки заменить на эти, только измените domen.ru на нужный адрес

  11. Столкнулся с похожей проблемой в прошлом. Не люблю яндекс, гугл лучше!

  12. Очень хорошее и полезное сообщение. Сам недавно искал в интернете данную тему и все обсуждения связанные с ней. Но только тут нашел хороший и качественный и что немаловажно полезный материал. Спасибо автору блога за предоставленную информацию.

  13. что касается темы, то мне кажется актуальность будет известна только через некоторое время

  14. Спасибо! Информация пригодилась.

  15. Вставлял строчку remove_action(’template_redirect’, ‘redirect_canonical’); Но, попрежнему редиректит либо с www, либо на www (смотря как в настройках блога вписать). Может подскажете как сделать, чтобы и с www и без www не было редиректа. Спасибо! WordPress 2.6

  16. iRedactor, даже не знаю, у меня на всех сайтах (WP 2.3 — 2.5, 2.6 пока нету) редирект убирается при помощи этой строчки… посмотрите, может в .htaccess прописан редирект

  17. мдяяяя ….. *много думал*…. автору спасибо за пост !!

  18. Спасибо за пост. Разобрался, думаю теперь всегда 200 будет! )

  19. Да, автору респект и уважуха в wordpress версии 2.6.2 нету функции remove_action заремил //wp_redirect($redirect_url, 301); //exit(); вроде идет 200 и редиректа нет

  20. Спасибо большое а то я уже 3 месяца не в Яндексе — все искал в чем трабла, а посмотреть ответы сервера что-то не подумал Теперь все гуд….. Еще раз спасибо.

  21. >>в wordpress версии 2.6.2 нету функции remove_action Спасибо за информацию, subnets, не знал, не добрался еще до нового WordPress’a

  22. >>Спасибо большое source, Рад что эта инфа оказалась полезной

  23. а robots.txt сильно помогает ускорить или облегчить индексацию? т.е. рекомендуете обновить если сайт уже в яндексе?

  24. мдяяяя ….. *много думал*…. автору спасибо за пост !!

  25. «Мало кто может похвастаться такой смекалкой, как у автора»

  26. Я извиняюсь может я чего то не дочитал или чего-то не допонял я просто новичок, скажите мне такую ситуацию: уменя был сайт на простых html страничках перешел я на wp, со старых страниц поствил редирект 301 на хостинге, Гугл все индексирует, в яндексе в поиске вместо названия страниц url страниц с нового сайта вообще нет в индексе. Что делать если можно помогите, дайте подробную инструкцию. Спасибо!

  27. У меня такая же трабла, спасибо , сейчас попробую сделать. С меня пиво

  28. Спасибо очень кстати. Я с хостером 2 дня переписывался, почему у меня сайт дает ответ 301. Действительно проблема WP.

  29. пока я жив, я буду помнить ваш ресурс заношу в букмарки….

  30. Охотник на зелёных » Промотр HTTP-заголовков:

    […] (ну нужно мне ) я натолкнулся на пост под названием “Проблема с 301 редиректом и WordPress или Почему не индексир

  31. Может кто-то что-то подскажет… autosvit.net.ua вообще не индексируется (соответствующая опция «индексировать» включена в вордпрессе)

  32. В WordPress 2.7, если я правильно все понял просто надо remove_action(‘template_redirect’, ‘redirect_canonical’); прописывать не в functions.php, а в canonical.php

  33. Wordpress, Яндекс, редирект 301, зеркала www и без www | Когнитивная психология и эмоции:

    […] Яндексом, я решил, что ожидание слишком затянулось. Предложенное Иваном Ширко решение этой проблемы мне не понравилось — он предлагает, по сути, просто […]

  34. После смены движка на WordPress 2.7 сайт не индексируется. В Яндекс.Вебмастер в индексе только: http://****.ru/ без заголовка и описания. В ошибках растет число ошибок при индексации страниц: HTTP-статус: Ресурс перемещён навсегда (301)) — 11 / 28.01.2009 17.02.2009 /articles/a4 17.02.2009 17.02.2009 /articles/a5 17.02.2009 17.02.2009 /articles/a6 17.02.2009 17.02.2009 /articles/a7 17.02.2009 17.02.2009 /pic/g8 17.02.2009 17.02.2009 /pic/g9 17.02.2009 17.02.2009 /service/corporation 17.02.2009 17.02.2009 /service/love 17.02.2009 17.02.2009 /service/reportage 17.02.2009 17.02.2009 /service/wedding 17.02.2009 17.02.2009 В инете нашел материал по похожим проблемам, на данный момент стоит редирект 301 в .htaccess DirectoryIndex index.php index.html RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_HOST} ^www.****.ru$ [NC] RewriteRule ^(.*)$ http://****.ru/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] в 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 Host: ****.ru так же wp-includes/canonical.php закоменчены строчки: // wp_redirect($redirect_url, 301); // exit(); так же похожая проблема наблюдается там где в WordPress 2.7 не вносилось никаких изменений. Огромная просьба помочь в решение проблемы!!!

  35. Wordpress отдаёт все страницы с 301-м кодом | CetLot:

    […] в инете, я нашел статью, которая явственно указывает на то, что это косяк […]

  36. Тоже была подобная трабла. Вылечил этим же. Странно то, что WP одинаковый был на 10 сайтах, а 301 отдавал тока на 1. Я не разбирался.

  37. to alexspb это после переноса сайта забыл поменять htaccess, теперь вернул старый, спасибо

  38. яша вообще последнее время жадный стал

  39. Большое спасибо автору за полезную статью

  40. Умоляю, подскажите новичку, как узнать ответ сервера при обращении к сайту? У меня такая же проблема с перенаправлением и Яндексом-редиской:)

  41. При таких действиях перестает работать WPSuperCache, и все свои настройки ЧПУ

  42. У меня к вам вопрос. На одном моем блоге в яндексе всего 1 страница, а в google 40. С чем это может быть связано? Бана нет, я проверял

  43. Я полный чайник в этом((( Иван, подскажи, как закоментировать строчку… Заранее спасибо!

  44. у меня на сайте не получилось исправить ошибку с помощью remove_action(’template_redirect’, ‘redirect_canonical’); чем неприятным грозит простое отключение редиректа в вордпрессе по первоначальному рецепту?

  45. Боже мой, как я замучалась с этой ошибкой, уже всё что могла перечитала и перепробовала, никакого толка. А вот Вы мне так помогли! Всего одна строчка и счастье улыбнулось — 200 OK. Нет слов! Просто низкий поклон! Спасибо!

  46. Большое спасибо за статью! Очень помогли разобраться.

  47. Все пишут как выключить редирект. А вот как его включить? Много раз встречал блоги, которые от рождения этого не делают.

  48. Спасибо! Вы меня просто спасли! Чертов WP Super Cache постоянно менял .htaccess после чего сайт через www становился недоступен. Удалил эту заразу через админку на хостинге, так как он и удаляться не хотел добровольно!

  49. Наткнулся на статью случайно в поиске, симптомы были похожими — блог на ВП не индексируется яшей абсолютно. На pr-cy «взглянул» глазами робота, и выяснил, что у меня ВСЕ страницы — 403 Forbidden. Вот зе фак, простите мой французский? Не то, чтобы я был силен в ПХП, поэтому весь код сайта не пересмотрю (точнее толку не будет), но вроде бы я кардинальных изменений не вносил… Помогите советом! З.Ы. Сайт индексируется гуглом на ура — ?

  50. Огромное спасибо. Тоже недавно столкнулся с данной проблемой вордпресс. Спасибо за полезную информацию

  51. Тож долго мучался, вордпресс старый, помогла вставка remove_action(’template_redirect’, ‘redirect_canonical’); именно в файл canonical а не functions!!!

  52. А мне все это не помогло — prcy до сих пор мучает меня 403 ответом, хотя сайт работает и гуглом отлично распознается. Обязательно ждать следующего апдейта ТИЦ, или я мог еще что-то забыть? remove_action прописал, роботс.тхт поправил (проверка яндексом этого файла показала, что все в порядке) — и все-таки не попадает сайт в поиск

  53. Подскажите пожалуйсто, что значит такой код? RewriteCond %{HTTP_REFERER} !^http://site.ru/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://site.ru$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.site.ru/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.site.ru$ [NC]

  54. СПАСИБ АВТОРУ И C.ONE КОМЕНТИРОВАТЬ НАДО 2 СТРОЧКИ! так же wp-includes/canonical.php закоменчены строчки: // wp_redirect($redirect_url, 301); // exit();

  55. не знаю сможете помочь или нет, но вот: делаю 301 редирект таким образом: Redirect 301 /stat/page.htm http://www.sait.ru/question/page.htm все хорошо, но конечная ссылка на которую производится переход после редиректа выглядить как http://www.sait.ru/question/page.htm?url=stat/page.htm как избавится от этого вопроса и ненужного окончания? если можно то ответ на почту, так как не нашел как подписаться на комменты

  56. Такое лечиться только постепенным отслежыванием ощыбки. Делать что то на угад дело очень неблагодарное так как можно и ничего ненайти.

Comments are closed.