Перейти к содержимому


Партнерская программа Kredov

Проблема дублей – безоговорочная победа

#1 Sergey_on

Sergey_on
  • Пользователь
  • 8 сообщений
  • Репутация: 3
6

Отправлено 11 Июнь 2013 - 14:09

Здравствуйте уважаемые коллеги, моё имя Сергей, я веду блог Site on! и по совместительству занимаюсь созданием и оптимизацией сайтов.

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

Размышляя на досуге обо всём этом, меня вдруг посетила гениально-простая идея, как можно легко справиться с этой проблемой действительно правильным способом. Мой метод полностью универсален, подходит для любого сайта на любой CMS (Joomla, Wordpress, Opencart, Magento - неважно). Кстати, если кто-то до сих пор борется с дублями страниц через robots.txt, то я не завидую вашим клиентам, без обид.

Далее я кратко опишу решения данной проблемы, актуальной для каждого веб-мастера, которому не безразлична судьба своего сайта в поисковой выдаче.
Итак, адекватным, рациональным решением проблемы дублей может стать 2 варианта: изменение ядра самого движка сайта специально под наши SEO нужды, либо прописывание мета-тега noindex на всех страницах-дубликатах.

Первый способ очень накладен и при этом его точно не назовёшь универсальным.

Второй способ будет идеальным решением, его нам советуют сами поисковые системы.

Гугл говорит:

При наличии на странице мета-тега noindex Google полностью исключает эту страницу из результатов поиска, даже если на нее ссылаются другие страницы.


А также:

Чтобы полностью исключить вероятность появления контента страницы в индексе Google, даже если на нее ссылаются другие сайты, используйте метатег noindex


Тоже самое советует и Яндекс. Только как нам заставить мета-тег:
<meta name="robots" content="noindex, nofollow">
самому появляться там, где нужно? Это вам не robots.txt, где мы написали пару запретов и сидим довольные. Именно эта мысль и натолкнула меня на дальнейшее решение: «а почему бы и нет?».

Я решил написать небольшой PHP-скрипт, благодаря которому мы сможем управлять выводом мета-тега noindex также легко, как мы прописывали запреты в robots.txt. И вот он:
<!--?php if(preg_match('#?|&|/notify$|^/cart#', $_SERVER['REQUEST_URI'])){ ?-->
<meta name="robots" content="noindex, nofollow">
<!--?php } ?-->

Данным скриптом мы отрисовываем мета-тег на тех страницах, url которых содержат знак вопроса, знак амперсанда, заканчиваются на notify, начинаются на cart (это пример, у вас, естественно, данные значения могут отличаться). То есть здесь работает всё по аналогии с robots.txt, разница только в том, что robots.txt НЕ предназначен для удаления дублей!

Ещё один важный момент: нельзя одновременно закрывать дубли от индексации этим способом и через robots.txt. Используйте только этот способ, а из вашего robots.txt удалите все disallow директивы, кроме тех, что были там по умолчанию.

Немного статистики: с тех пор как я придумал эти пару строчек, я внедрял их во все свои интернет-магазины, первые результаты не заставили себя долго ждать, за неделю на одном из сайтов полностью исчезло из индекса Гугл (сопливого) 200 дублей, процент страниц в основном индексе поднялся на 12%. Посмотрите на мой блог (ссылка в конце), у него 80% страниц в основном индексе Гугл! Это при том, что остальные 20% - это файл sitemap, моя rss.xml лента и ещё пару подобных файлов, которые Гугл (видимо от скуки) тоже решил добавить в свой индекс, я ему этого не запрещал. Индексация в Яндексе составляет 100%, ни одной проиндексированной страницы не выпало, так как не было проиндексировано ни одной лишней.

Теперь расскажу как же им пользоваться.

Для работы данного скрипта были использованы регулярные выражения и глобальная переменная PHP, в которой всегда хранится текущий URL:
$_SERVER['REQUEST_URI']

Благодаря функции preg_match мы осуществляем поиск по текущему URL и, если находим в нём искомый участок, то выводим тег ноиндекс.

Давайте разберёмся более подробно:
if(preg_match('#?|&|/notify$|^/cart#', $_SERVER['REQUEST_URI'])

В одинарных кавычках (они разделены запятой) лежат два параметра функции. Первый – что ищем, второй – где ищем (так как второй параметр – это переменная, для неё кавычки не пишем).

Знак решётки обозначает начало и конец регулярного выражения, через вертикальную палочку обозначаются разные условия, то есть: или то|или это|или ещё что-то.

Обратный слеш обозначает экранирование спецсимволов, их у нас два: знак вопроса и амперсанда. UpDate: старая привычка... амперсанд экранировать не нужно и вообще его не обязательно ставить, так как знак & не будет встречаться в УРЛе без знака ?, поэтому достаточно оставить один знак вопроса.

Знак ^ обозначает начало УРЛ, имя домена не учитываем, любой УРЛ начинается со слеша (всё как в robots.txt).

Знак доллара обозначает конец УРЛ.

Если знака доллара или птички не стоит, это значит, что мы ищем в любом месте: хоть в начале, хоть в конце, хоть в середине.

Ещё одна важная деталь:
preg_match('#/notify/?$#', $_SERVER['REQUEST_URI'])

здесь я после notify поставил слеш, вопросительный знак и знак доллара. Такая запись обозначает: что мы ищем notify в конце URL, после notify может быть слеш (только один), а может его и не быть, потому слеш и под вопросом. Не путайте такое применение знака вопроса с заэкранированным знаком вопроса:
preg_match('#?#', $_SERVER['REQUEST_URI'])

В примере выше знак вопроса не имеет никаких специальных возможностей, так как он заэкранирован, то есть сейчас мы ищем все УРЛ, в которых есть знак вопроса.

Размещать этот PHP-скрипт нужно внутри тега head, сразу после его открытия, это делается в главном файле вашего шаблона (обычно index.php).

Вот и всё, что вам нужно для окончательной победы над дублями в любой CMS, метод универсальный, и СОВСЕМ не тормозит ваш сайт. Я уже давно использую данный способ, а теперь о нём узнали и вы, желаю удачи в ваших веб-разработках!

Полная версия статьи на Site on!

При поддержке: Fozzy - эксклюзивный спонсор конкурса на Masterwebs. На хостинге Fozzy ваш сайт будет работать до 3-х раз быстрее, а отзывчивая поддержка поможет в любой трудной ситуации. Попробуйте быстрый хостинг Fozzy бесплатно в течение 7 дней!
Изображение

 

 

Сообщение отредактировал Sosnovskij: 12 Июль 2013 - 15:18

  • 1

#2 Shelvin

Shelvin
  • Пользователь
  • 101 сообщений
  • Репутация: 2

Отправлено 12 Июнь 2013 - 00:19

Данным скриптом мы отрисовываем мета-тег на тех страницах, url которых содержат знак вопроса, знак амперсанда, заканчиваются на notify, начинаются на cart (это пример, у вас, естественно, данные значения могут отличаться). То есть здесь работает всё по аналогии с robots.txt, разница только в том, что robots.txt НЕ предназначен для удаления дублей!


Стоит тогда отметить, что на сайте обязательно должен быть включен ЧПУ.
  • 0

#3 Sergey_on

Sergey_on
    Topic Starter
  • Пользователь
  • 8 сообщений
  • Репутация: 3

Отправлено 12 Июнь 2013 - 09:19

Стоит тогда отметить, что на сайте обязательно должен быть включен ЧПУ.


Я не считаю, что это стоит отметить. На сайте НЕ обязательно должны быть включены ЧПУ, на работу скрипта они никак не влияют. Я написал что:

это пример, у вас, естественно, данные значения могут отличаться


Поэтому про ЧПУ стоит уточнить только для тех, кто бездумно скопировал, а для всех остальных этот код должен выглядеть так:
<?php if(preg_match('##', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
И дальше каждый сам решает, что ему туда вписывать. Для тех кто не понял "туда" - это между решётками. Следовательно, если человек вписывает знак вопроса, то включены у него ЧПУ или нет, но этот человек хочет запретить все страницы, УРЛ которых содержит знак вопроса.

Я не могу знать, понадобится кому-то запрещать знак вопроса с отключёнными ЧПУ или нет, у каждого разные потребности и идеи, поэтому я стараюсь не сужать кругозор читателя подобными деталями.
  • 0

#4 webby

webby
  • Пользователь
  • 9 сообщений
  • Репутация: 0

Отправлено 16 Июль 2013 - 21:10

Два вопроса есть по этой теме:


1) А если у меня сайт без CMS и ссылки с =?= информативных страниц (статьи, советы, новости и т.п.) отсутствуют изначально, т.е. везде на сайте ссылки на эти страницы динамически создаются в виде ЧПУ, т.е. без знака вопроса. Кроме того, в файле sitemap.xml я также задал ссылки только с ЧПУ. В Яндекс.Вебмастере отображаются только страницы с ЧПУ. Практически же есть возможность открыть одну и ту же страницу в браузере и по ссылке вида http://site.com/article.php?id=7, и по ссылке вида http://site.com/article/7. Но в то же время нигде нет упоминания о ссылках с =?=.
Есть ли необходимость в данной ситуации закрывать от индексации страницы, в URL которых содержится знак вопроса?


2) После недавней реконструкции сайта страницы стали доступны еще и по адресу вида http://site.com/arti...nyatnaya-tema=7, т.е. в URL передается не только id статьи, но и тема на транслите, чтобы пользователю было понятно по одному только URL, куда ведет его эта ссылка. (Я заметил, что на этом форуме примерно такой же принцип формирования URL страниц.) Подробнее об этом я написал в теме http://www.masterweb...bit-ili-ne-bit/ . Чтобы не было дублей я настроил 301-й редирект на страницах при помощи php скрипта, который передает соответствующие заголовки, несущие информацию, что страницы по адресу вида http://site.com/article/7 навсегда переехали на адрес вида http://site.com/arti...yatnaya-tema=7. Вроде бы все просто и понятно. Но у меня таким образом реализована эта реконструкция, что страницы вида http://site.com/arti...nyatnaya-tema=7 могут быть доступны по миллиону адресов вида http://site.com/article/luboj-text=7 . Но опять таки эти =левые= адреса нигде не фигурируют, ни на динамических страницах сайта, ни в файле sitemap.xml и скорее всего их не будет в индексе Яндекса (откуда же он о них узнает, если они нигде не упоминаются? :) ).
Поэтому, есть ли необходимость скрывать от индексации (например 301-м редиректом или еще как) эти =неправильные= адреса страниц?





Жду ответа, спасибо.
  • 0

#5 vsevideshey

vsevideshey
  • Пользователь
  • 30 сообщений
  • Репутация: -4

Отправлено 20 Июль 2013 - 16:47

Я в коде полный ноль и практические ничего не понял как его установить. У меня wordpress, ЧПУ настроены.
Какой код и куда нужно вставить?
  • 0


Оформление форума – IPBSkins.ru