RigWEB

Чистые адреса страниц (Clean URL) на WordPress

И вновь приветствую своих читателей и подписчиков на страницах Блога Свободного Вебмастера! Те кто уже давно определился с системой управления контентом (CMS) и сделал выбор в пользу WordPress безусловно знает, что вордпресс генерирует динамические страницы и зачастую на конце урла (url) у некоторых страниц фигурируют различные параметры.

Чистые адреса страниц на WordPress (Clean URL)

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

Поиски подобного решения у меня начались весной этого года, когда после введения на блоге древовидных комментариев мне пришлось столкнуться с некоторыми трудностями, если говорить точнее — с replytocom. Проблема была решена, но последствия продолжали одолевать блог. О чем я? Попробую пояснить…

Чистые ссылки или Clean URL

Многие вебмастера знают о таком параметре, как процент страниц под фильтром в ПС Google, это страницы, не участвующие в основном поиске. Я не буду говорить об основном и дополнительном индексе этой поисковой системы и уж тем более о их существовании. Речь пойдет про данные получаемые таким параметром:

1
site:http://webliberty.ru/&

и те же самые данные через этот параметр:

1
site:http://webliberty.ru/*

Они как правило отличаются. После моей истории с replytocom процент страниц под фильтром заметно увеличился, достигнув почти 90%, в то время как процент страниц не под фильтром стремительно сократился. Вот тут то и началась у меня паника, что такое, пишу оригинальные тексты, в роботс внес изменения, чтобы исключить лишние страницы из индекса, но ничего не помогало. В логах панели инструментов для вебмастеров Гугла на вкладке с ошибками сканирования появлялись страницы с replytocom, которых в принципе быть не должно, ведь на тот момент я отключил древовидные комментарии и подобные страницы с динамическими урлами не должны были формироваться…

Тогда мне пришло решение просто избавится от таких динамических параметров страниц и сделать «чистые» ссылки. Перерыл исходный код движка, нашел где они формируются, пробовал редактировать, но все старания оказывались напрасными т.к. при сохранении блог вообще переставал работать и выдавалась ошибка. Можно сказать эксперимент провалился, нужно было искать другой выход из сложившейся ситуации.

Чистые ссылки (Clean URL) — это ссылки, которые не содержат в своем адресе элементов запроса к базе данных, а вместо этого содержат только путь к документу (странице). Чистые ссылки используются в целях поисковой оптимизации (SEO), а также для создания человеко-понятной структуры (ЧПУ).

С Clean URL наверняка знакомы пользователи Drupal, где эта функция встроена в движок и может включаться/выключаться одним щелчком кнопки мыши, на WordPress же такого встроенного решения нет. Чуть больше года назад, когда я еще стол перед выбором CMS для блога, мне довелось оценить это преимущество Drupal перед другими системами.

Как сделать Чистые ссылки (Clean URL) на WordPress

Единственным правильным решением в моем случае оказалось использование 301 редиректа. С этого момента и пригодятся знания, которые я излагал совсем недавно.

Для того чтобы сделать чистые адреса страниц на вордпресс (Clean URL) необходимо добавить пару строк в файл .htaccess:

1
2
3
4
5
6
7
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} .
RewriteCond %{QUERY_STRING} !^(s|p|page_id|srek)=.*
RewriteCond %{REQUEST_URI} !.*wp-admin.*
RewriteRule ^(.*)$ /$1? [R=301,L]
</ifmodule>
Внимание! Обратите внимание, что в зависимости от Ваших настроек и структуры блога возможно понадобится внесение изменений в код! Используйте данное решение если на 100% уверены в своих действиях. Или делайте резервную копию файла и редактируйте на свой страх.

В этом коде в 4 строке в скобках указаны параметры URL, которые следует игнорировать и в случае их обнаружении в адресе не производить редирект:

  • параметр s отвечает за поиск по блогу. Если не исключить этот параметр, то воспользоваться поиском не получится, пользователя попросту перебросит на главную страницу;
  • параметр p если помните, является основным в адресе страницы при выключенном ЧПУ;
  • параметр srek является необходимым если Вы используете на своем блоге плагин Subscribe to Comments Reloaded, который формирует страницу с ним при редактировании своих подписок на комментарии.

Собственно говоря, последний параметр мне пришлось вставлять в тот момент, когда узнал, что становится невозможно отредактировать свои подписки на комментарии к записям. Подсказал мне об этом San4izl, когда оставил вот такой комментарий:

Clean URL на WordPress требуют особого внимания вебмастеров

Опытным путем я выяснил, что действительно, идет редирект на главную, вместо открывающейся страницы с подписками. Приношу свои извинения San4izl и возможно другим читателям за предоставленные неудобства, теперь эта проблема решена и Вы можете редактировать свои подписки без ограничений.

Продолжаю разбирать код. В 5 строке исключается редирект со страниц администрирования, т.е. при входе, регистрации и прочих действиях. Вот в принципе и все, что хотел отметить. Единственное, что Вам требуется поправить в этом коде — это 4 строку и то не всем, поэтому обратите на нее особое внимание :!:

Результаты использования Clean URL на WordPress

По прошествии некоторого промежутка времени ситуация с моими процентами страниц под фильтрами и не под фильтрами заметно улучшилась. В панели инструментов Гугла в течение нескольких дней пропали все упоминания про replytocom, в том числе и ошибки сканирования страниц с этим параметром, помеченные как исключенные файлом robots.txt.

Чистые адреса страниц сократили число ошибок сканирования роботом Google

На скрине видно минимальное число заблокированных страниц файлом robots.txt, в то время как до использования Clean URL их число достигало 500 и более, по мере появления новых комментариев. Кстати, раз уж речь зашла про роботс, то вносимые ранее изменения, запрещающие индексацию динамических урлов я отменил, теперь они ни к чему.

Чтобы было понятнее, приведу графические данные, полученные в панели Яндекс Вебмастер, они очень наглядно отражают действительность:

Число страниц, исключённых роботом

На графике видно, как с конца марта — начала апреля резко возросло число страниц загруженных роботом, но исключенных из поиска (синий график), а в августе, как только я начал использовать чистые ссылки на WordPress, синий график пошел вниз, тем самым почти выровняв число загруженных и проиндексированных страниц.

Подобного отчета в Google я не смог добыть, если кто знает есть ли такая возможность, с удовольствием выслушаю в комментариях. Ну а пока, по-моему мнению, положительный результат на лицо :smile:

  1. ahawks

    Тема интересная, но можно вопрос не по теме?) А почему добавил ты свой блог в ЯК в раздел веб дизайн, а не продвижение сайтов? Вот на днях выведу деньги и попробую тоже свой сайт добавить в ЯК и думаю в какой каталог его засунуть.

    Ответить

  2. Webliberty

    ahawks, а он у меня в двух рубриках находится: в веб-дизайне и продвижении ;-) Подробнее об этом здесь. Рубрику выбирает сам модератор при рассмотрении заявки, самому выбрать не получится. Удачи!

    Ответить

  3. ahawks

    Webliberty, Спасибо) Предыдущий пост не так внимательно читал) Будем надеятся, что возьмут и рубрику выберут нормальную) А пока деньги перечисляются попробую как нибудь улучшить внешний вид, убрать лишнее, может чего нибудь добавить нового)

    Ответить

  4. san4izl

    Вот так статья!! Спасибо. Действительно ценная инфа. Хотя сам никогда не сталкивался с такой проблемой. Также хотелось бы почитать статью про то, как вытаскивать из соплей гугла страницы. Благодарю, что отреагировал на мою проблему!

    Ответить

  5. Webliberty

    san4izl, мне было интересно писать этот пост, ведь на протяжении нескольких месяцев, начиная с лета, отслеживал свое положение. Так получается, что на восстановление в Гугле после неверных действий у меня ушло почти пол года… Теперь отношусь более внимательнее к своим действиям. Спасибо тебе за подсказку, благодаря ей внес некоторые изменения в код. А другие промолчали, возможно также хотели отписаться от новых комментариев к какому-то посту, но не дали знать о проблеме.

    Ответить

  6. swede1987

    Еще хотелось бы добавить — очень к месту может подойти специальный плагин WordPress, который добавляет в URL .html
    Называется html_on_pages

    Ответить

  7. Webliberty

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

    В админке WordPress найти Настройки >> Постоянные ссылки. Выбрать Произвольно и в текстовое поле вставить:

    1
    
    /%postname%.html

    Ответить

  8. ladybloger

    Да, кстати, меня тоже раздражает, когда нельзя отказаться от подписки на комментарии к той теме, которая уже перестала по каким-то причинам интересовать.

    Вот иной раз боюсь ставить галочку — уведомлять о новых комментариях. А то потом в почте писем не сыщешь — одни комментарии. :|

    Ответить

  9. Webliberty

    ladybloger, если такая ситуация возникает, то нужно предупредить автора, возможно он не знает о такой проблеме…

    Ответить

  10. aleksandr

    Здравстуйте! У меня похожая проблема , но только с фидами. «Replytocom» запретил в robots.txt и они больше не индексируется , а все остальное лезет с каждой публикацией.Посоветуйте?

    Ответить

  11. Webliberty

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

    В файле /wp-includes/feed-rss2-comments.php я удалил все содержимое и вставил вместо него:

    1
    2
    3
    4
    
    <?php
    header("HTTP/1.0 404 Not Found");
    exit;
    ?>

    Таким образом все фиды к каждой странице отдают 404 (основной фид при этом не пострадает) и через пару недель отвалились и из выдачи и из логов Гугла с Яндексом. При этом я убрал из роботса строку

    1
    
    Disallow: /feed/

    иначе робот не узнает что страницы не существуют и по-прежнему будет их держать.

    Ответить

  12. aleksandr

    Спасибо большое! Буду пробывать. В wordpress с этим у многих проблема, после того как я заметил у себя дубли, стал смотреть как у других. Интересно, что блоги разного уровня, а проблема одна и та же. Если знаете решение: как избавится от дублей в WordPress, то многим поможете в этом. Пока в сети правильного решения этой проблемы я не нашел

    Ответить

  13. Webliberty

    aleksandr, решение есть всегда! В основном это robots.txt, если не помогает, то стоит искать дополнительные решения. Я для избавления от дублей пользуюсь роботсом, Clean URL, инструментами в панели для вебмастеров Гугла (исключение параметров) и путем эксперимента, связанного с редактирование исходников (по аналогии с индексацией фидов).

    Ответить

  14. Дмитрий

    Огромное Человеческое Спасибо Тебе Денис! Ведь как-то начинал читать эту статью, да не дочитал, думал меня не каснется, а оказалось как раз таки наоборот. У меня как раз проблема с урлом на конце /feed. Попробовал сделал по Твоему совету, посмотрим, пропадут лишние дубли страниц :!:

    Денис, только у меня возник вопрос: мне нужно только заменить код в файле /wp-includes/feed-rss2-comments.php и из robots.txt убрать Disallow: /feed/, больше ничего делать не нужно? урлы сами пропадут? или еще что-то нужно делать?

    Ответить

  15. Webliberty

    Дмитрий, в принципе все верно, такие страницы после изменений отдают 404 ошибку и со временем робот ПС удалит их из индекса сам. Но можно ускорить это дело, удаляя вручную каждый лишний проиндексированный УРЛ, а 404 код страницы дает полное право на удаление. Удаление ручным запросом происходит в течение суток, а если ждать, то может и месяц уйти.

    Ответить

  16. Дмитрий

    Спасибо Денис! Теперь стало все понятно ;-)

    Ответить

  17. Владислав

    Если у тебя отсутствуют древовидные комментарии, то как сделать кнопку — «ответить»?

    После того, как прописал в файл .htaccess, при нажатии на рубрику картинки перестали отображаться, не подскажешь, могли ли эти поправки так повлиять?

    Ответить

  18. Webliberty

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

    Для тех, у кого возникают подобные вопросы: внимательно изучайте структуру страниц, как формируются ссылки, куда ведут ссылки на изображения и в случае когда в url присутствует динамическая составляющая, которую не нужно блокировать добавляйте ее в исключения. Пример как это сделать я приводил на плагине Subscribe To Comments, все остальное — по аналогии.

    Ответить

  19. Alex

    Заметил, что после добавления в хатцес кода перестал работать go.php. В чем может быть проблема? Временно пришлось удалить код :sad:

    Ответить

  20. Webliberty

    Alex, внимательно посмотрите на URL, возможно для ссылок, проходящих через go.php, потребуется добавить какой-то параметр в исключения. Пример как это сделать приведен в статье.

    Ответить

  21. Alex

    Webliberty, я если честно, так и не понял, какой параметр мне присвоить. Ссылка у меня идет следующего вида:

    1
    
    мой_сайт.ru/gо.рhp?url=httр://чужой_сайт.ru/

    После установки кода в хатцесс редирект открывался, но в нем не отображалась ссылка для перехода, соответственно посетитель никуда не мог перейти. Грешу на конфликт кода. Можете взглянуть?

    Ответить

  22. Webliberty

    Alex, никаких конфликтов, просто Вы не прислушались и по аналогии со статьей не добавили параметр в исключение. В такой ссылке параметром после знака вопроса является url — добавьте его в строку, тогда такие ссылки должны нормально работать:

    1
    
    RewriteCond %{QUERY_STRING} !^(s|p|srek|url)=.*

    Ответить

  23. Aleks

    К исключениям нужно еще добавить page_id и preview. Иначе не будет работать предпросмотр статей.

    Ответить

  24. Webliberty

    Странно, но у меня работает предпросмотр записей. В URL вида ?p=1&preview=true есть параметр p, который добавлен в исключения. А для предпросмотра страниц, действительно нужно добавить page_id, спасибо, добавил в статью.

    Ответить

  25. Alex

    Добрый вечер. Опять стучусь в надежде на помощь. Решил поставить себе на сайт скрипт анонимайзера для личных нужд. Почему-то конфликтует с кодом (((

    Скрипт генерирует следующий урл:
    мой_сайт.ru/папка_анонимайзера/browse.php?u=7NNIxDS%2FDhaRY2%2F72Z2%2BP%2BSx&b=29

    По логике, я должен u добавить в исключения, добавил, но все равно отказывается работать. В чем может быть проблема ? Подскажите пожалуйста :oops:

    Ответить

  26. Webliberty

    Возможно кэш? По логике вещей Вы сделали правильно и должно работать)

    Ответить

Ваш комментарий:

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: