Альтернатива robots.txt – как навсегда избавиться от дублей страниц на сайте

"Все аспекты самостоятельного создания и продвижения сайтов
от практика с многолетним опытом." — блог Рудь Сергея
info@site-on.net
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
07.04.2013

Здравствуйте, уважаемые читатели блога Site on! Сегодня речь пойдёт о такой наболевшей теме, как правильное избежание дублей страниц в наших любимых CMS. Метод, описанный ниже, подойдёт для абсолютно любой CMS, используете ли Вы Joomla, Wordpress или что-то другое. Однако в этой статье для большей наглядности будут приведены примеры из актуальной на данный момент связки Joomla 2.5.9 + VirtueMart 2.0.20, но ещё раз повторюсь, абсолютно без разницы какой CMS Вы пользуетесь!

Всем людям, заботящимся о SEO своих сайтов известна данная проблема не понаслышке, приходится отыскивать и закрывать все технические ссылки (например, ссылка на корзину в интернет-магазинах) с помощью атрибута rel="nofollow", и затем, конечно же, прописывать запреты в robots.txt. Всё это отлично работает для Яндекса, но вот для Гугл robots.txt носит лишь рекомендательный характер. Запрещённые разделы всё равно могут попасть в индекс Гугл, а тем более, если на эти разделы вдруг нашлись dofollow ссылки. О том, как нужно проводить внутреннюю поисковую оптимизацию сайта вы можете прочесть, перейдя по ссылке.

Да, Гугл не индексирует содержимое такой страницы, не зря же мы его запретили в robots.txt, НО само наличие такой страницы (с title в виде адреса страницы) он успешно добавит в свой «сопливый» индекс (Supplemetal Index), что тоже не есть хорошо. (Если вы до сих пор не знаете что такое title страницы, предлагаю прочесть статью об основах HTML и о том, как создать веб-страницу за пару минут.) Дальше нам остаётся лишь заделывать все дыры, удалять все нежелательные ссылки вручную из кабинета Вебмастеров и надеяться, что Гугл не найдёт сотню другую новых дублей.

Как же на 100% защитить себя от подобной возни и перспективы проседания в поисковой выдачи? Как сделать так, чтобы и Гугл и Яндекс не индексировали страницу невзирая ни на что, даже на прямые входящие ссылки? Решение этому известно уже давно и его предлагают нам сами поисковые системы. Всё, что нужно, это прописывать в «голове» страниц, которые мы хотим запретить к индексированию, мета-тег robots со значением content="noindex, nofollow" или content="none", вот так:

<meta name="robots" content="noindex, nofollow"/>

Лично я использую значение атрибута content как в примере выше.

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

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

А также:

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

Хорошо, с этим всё ясно, да вот только вручную прописывать этот мета-тег, мягко говоря, не с руки, если это вообще возможно и предусмотрено структурой вашей CMS. И если в VirtueMart 2 это предусмотрено:

дубли страниц

То это так или иначе ничего не меняет, ведь страницы категорий и самих товаров нам как раз таки нужны, а вот тот же товар /sharik-detail, но со ссылкой /sharik-detail?showall=1 - уже нет.

Нам нужно что-то такое же удобное, как и сам robots.txt, в котором я, к примеру, всегда указываю для своих сайтов на Joomla следующую запись:

Disallow: /*?
Disallow: /*&

Которая и была призвана решить проблему дублей, а также, к примеру:

Disallow: /*notify$
Disallow: /*askquestion

Что закроет от индексации в Virtuemart 2 страницы подписки на «появление товара в наличии» и страницу с формой «задайте вопрос о товаре». Другими словами мы попросту используем регулярные выражения, которые благодаря паре строк должны решать все наши проблемы с дублями. Было бы неплохо, чтобы мета-тег robots сам появлялся на тех страницах, которые мы запрещаем в robots.txt, недаром же они имеют одинаковое название :)

Это и натолкнуло меня на мысли, благодаря которым я и придумал решение данной проблемы. Теперь я использую данный метод на всех своих проектах, а сегодня хочу поделиться им и с вами, дорогие читатели блога Site on! Так что попрошу не судить меня строго, если вы не посчитаете мой способ достойным для ваших ресурсов - моя цель поделиться с вами информацией, а на Нобелевскую премию я не претендую ;)

Site on! : реальная альтернатива robots.txt

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

<?php if(preg_match('#\?|&|%|/notify$|^/cart#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>

Это и есть те пару строчек, которые я надеюсь, принесут вашим сайтам большую пользу. Здесь мы используем условный оператор if и функцию preg_match(), которая выполняет проверку на соответствие регулярному выражению. Ниже я представил ссылку на страницу официального сайта PHP, где на русском языке(!) приводится описание данной функции и её применение http://www.php.net/manual/ru/function.preg-match.php

А мы же пойдём дальше. Если Вы на сайте используете ЧПУ (SEF) ссылки, то обычно рекомендуют прописывать в robots.txt следующие директивы:

Disallow: /*?
Disallow: /*&
Disallow: /*%

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

Предупреждение:

Использовать и robots.txt и мета-тег robots одновременно нельзя, так как поисковики не увидят ваш мета-тег из-за запрета этой же страницы в robots.txt

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

preg_match('##', $_SERVER['REQUEST_URI'])

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

preg_match('#\?|&|%#', $_SERVER['REQUEST_URI'])

Где в одинарные кавычки, через запятую заключают параметры функции (у нас их два: регулярное выражение и переменная с url, но по синтаксису переменную не нужно заключать в кавычки);
# - обозначает начало и конец регулярного выражения;
\ - это экранирование спецсимволов (метасимволов);
| - начало следующего условия.
Далее, через запятую, указываем, в какой строке мы хотим найти данные регулярные выражения, и в нашем случае это $_SERVER['REQUEST_URI'] – глобальная переменная PHP, в которой всегда хранится текущий адрес страницы, он начинается со слеша и не содержит имени домена, например, /index.html?sort=DESC

Вот и всё, теперь, если в нашем url будет содержаться любой из заданных нами символов, мы сразу же запретим его к индексации. Но на этом магия регулярных выражений не заканчивается. Допустим, мы хотим, чтобы у нас не индексировались страницы корзины. Для этого в связке Joomla 2.5 + VirtueMart 2 нужно запретить к индексированию все url, которые начинаются со слова /cart (корзина). Для этого пишем следующее регулярное выражение:

preg_match('#^/cart#', $_SERVER['REQUEST_URI'])

Где ^/cart –это наше регулярное выражение, ^ - говорит о том, что перед нашим условием не может быть ни одного символа, другими словами – знаменует начало строки.

Бывают случаи, когда нам нужно закрыть от индексации страницу с подпиской о появлении товара в наличии. В VirtueMart 2 адрес таких страниц могут начинаться как угодно и при этом они не содержат знак ?, % либо же &, в таком случае нам нужно найти другую лазейку, например то, что адреса страниц с подпиской о появлении товара в наличии всегда заканчиваются на /notify. А значит, составить правильное регулярное выражение, которое случайно не сможет нам навредит, будет проще простого:

preg_match('#/notify$#', $_SERVER['REQUEST_URI'])

Здесь всё аналогично, за исключением того, что мы не будем ограничивать начало строки символом ^, ведь в этот раз нам наоборот, нужен её конец. Для этого в конце мы ставим спецсимвол $, который говорит о том, что это обязательно должен быть конец строки, а если нет, то нам не нужно запрещать её к индексированию. Обращаю внимание, что если дописать в конце адреса страницы безобидный слеш, например, http://domen.com/tovar-detail/notify/ - то визуально для посетителя ничего не измениться, однако такая страница будет открыта для индексации, так как мы указали, что после /notify не должно быть ни одного символа! Этот пример притянут за уши, так как VirtueMart 2 всегда генерирует эту страницу без / на конце, но если Вы хотите себя обезопасить, то используйте следующую комбинацию:

preg_match('#/notify/?$#', $_SERVER['REQUEST_URI'])

/? – знак вопроса здесь обозначает, что слеш в конце может быть, а может и не быть (поэтому он и под вопросом). Если сказать то же самое более «по-научному», то количество слешей может равняться 0 или 1.

Где размещать данную альтернативу robots.txt?

Размещать данный код необходимо сразу после открывающегося тега head, то есть в самом начале «головы» вашего сайта:

регулярное выражение

На скриншоте выше вместо # я по привычке использовал / (оба варианта одинаково верны). Но вам я рекомендую использовать # как я и писал до этого.

Как избавиться от дублей страниц в Joomla? Пошаговая инструкция

Далее я хотел бы рассмотреть уже частный случай размещения моего кода, чтобы с этой задачей мог справиться абсолютно любой читатель блога Site on! Под частным случаем я подразумеваю пошаговый и наглядный пример, как с помощью моего кода можно избавиться от дублей страниц в Joomla. Если Вы используете другие CMS, то вам эта информация всё равно будет полезной!

Шаг 1. Составляем интересующие нас регулярные выражения, однако это не значит, что нужно записывать в них ВЕСЬ robots.txt Что не нужно записывать в регулярное выражение? В регулярное выражение не нужно записывать стандартный перечень директив для сайта на Joomla (с другими CMS аналогично). А именно, стандартный robots.txt выглядит у нас так:

User-agent: *
Disallow: /administrator/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /images/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
Disallow: /libraries/
Disallow: /logs/
Disallow: /media/
Disallow: /modules/
Disallow: /plugins/
Disallow: /templates/
Disallow: /tmp/

Все эти директивы мы здесь и оставим, так как с этой частью robots.txt у нас и так проблем не наблюдается. Что ещё не нужно записывать в регулярные выражения? На самом то деле запрет & (амперсанда) в большинстве случаев является бессмысленным, так как он используется в url только вместе с ? (знаком вопроса), а значит в наши регулярные выражения достаточно указать только вопросительный знак! (естественно, в robots.txt также не должно быть & среди запрещённых)

Шаг 2. Находим в корне Joomla папку templates, дальше заходим в папку с вашим шаблоном и находим в корне этой папке файл index.php

Шаг3. Открываем index.php и сразу после открывающегося тега head, перед выводом основной части «головы» в Joomla <jdoc:include type="head" /> - вставляем наш код:

robots

Шаг 4. Обязательно тестируем! Проверяем сначала на страницах, где этого мета-тег быть не должно, а потом проверим там, где он должен появиться.

Шаг 5. Всё равно продолжаем ноуфолловить технические ссылки (корзина, уведомить о наличии и так далее) .

Вот какое базовое регулярное выражение я составил для одного из моих следующих интернет-магазинов на Joomla 2.5.9 + VirtueMart 2.0.20b, естественно, всё только в стадии разработки и по ходу дела может поменяться:

<?php if(preg_match('#\?|^/search|/notify$|^/cart|askquestion|^/manufacturer|^/user|^/2-uncategorised|^/component/#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>

Отличия синтаксиса robots.txt и регулярных выражений в PHP

Немного тонкостей для тех, кто не переходил на сайт php.net по приведённой в начале статьи ссылке. В отличие от robots.txt, в котором у нас символ звёздочки (*) является любым символом в любых количествах - в PHP эту задачу выполняет точка (.). В то время как звёздочка (*), обозначает 0 или более вхождений заданного символа (класса символов) в строку. То есть если в примере с вопросительным знаком на конце:

preg_match('#/notify/?$#', $_SERVER['REQUEST_URI'])

поменять знак вопроса на *, то это будет обозначать, что слеша на конце может и не быть, а может и встречаться бесконечное число раз подряд:

notify///////////

Производительность

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

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

В заключении хочу сказать, что, конечно же, данный способ правильнее называть «дополнением к robots.txt», а не его альтернативой, но такое название менее эпично и не так интригует :) И как ни крути, пользы от метода, представленного в данной статье, не меньше ;)

О том, как составить правильный robots.txt вы можете узнать по ссылке.

Всем спасибо за внимание, на сегодня всё. Также предлагаю вам подписаться на обновления (по почте, RSS или через соц. сети), чтобы всегда быть в курсе подобных идей. До встречи на страницах блога Site on!

Обновление от 08.04.2014:

Продолжение этой темы с улучшенным кодом специально для Joomla: читать.

С уважением, .
Пожалуйста, оцените эту статью
Средняя оценка: 4.78 из 5 (проголосовало: 37)
Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!

Ваш email:
Вы можете помочь развитию проекта, сделав всего 1 клик:
Спасибо!
Пожалуйста, прокомментируйте, как Вам моя статья?
Имя:
Комментарий:

Если Вы хотите вставить код, пожалуйста, заключайте его в [code][/code]

Подписаться на новые комментарии:

E-mail:


Защита от спама: у треугольника три...
Ответ:
Подписаться на новые комментарии без комментирования - Email:
Защита от спама: у треугольника три...
Ответ:

15.04.2013 14:49:09 Эндрю:
полезная статья добавил в закладки позже опробую

Ответить на комментарий


29.04.2013 16:05:12 seomag:
Джумла 2.5.6 + Вирт 2.0.14 до Вашей статьи пытался избавиться благодаря роботсу, ждал месяц никаких результатов страницы как были в индексе так и остались, попробовал сделать как здесь написано и вот прошла только первая неделя как дубли стали заметными темпами пропадать. Спасибо огромное!!!!!

Ответить на комментарий


14.05.2013 16:22:32 Кирилл:
Прикольно! Но я у фрилансера заказывал услугу допиливания Джумлы от дублей, работой доволен, так что уже не актуально :)

Ответить на комментарий


13.06.2013 10:32:02 Макс:
Спасибо!

Ответить на комментарий


25.06.2013 12:19:10 Владимир:
Супер!
Спасибо!

Ответить на комментарий


06.07.2013 11:56:57 Юрий:
Спасибо за статью, правильно ли я понял что если прописываешь php код в index.php то можно не ставить в роботс следующий код?
Disallow: /*?
Disallow: /*&
Disallow: /*%
06.07.2013 13:04:06 Сергей отвечает:
Юрий, не то что можно, а нужно НЕ ставить в роботс.
13.07.2013 07:09:02 Сергей отвечает:
Обновил статью, написал дополнительный абзац, чтобы это ещё раз подчеркнуть.

Ответить на комментарий


21.07.2013 22:58:23 Юрий:
У меня не работает метод со страницами askquestion
22.07.2013 18:02:10 Сергей отвечает:
Всё верно, ведь страницы VirtueMart с askquestion никак не привязаны к шаблону Joomla. Лично у меня они отображаются как пустые страницы с формой обратной связи.

Ответить на комментарий


22.07.2013 10:30:56 Юрий:
Подскажите, как решить проблему с askquestion?
Не добавляется meta тег.
22.07.2013 18:06:40 Сергей отвечает:
Обновите VirtueMart. Начиная с версии 2.0.22 страницы с askquestion отображаются на месте основного содержимого страницы. Другими словами с версии 2.0.22 страницы askquestion привязаны к шаблону Джумла, а значит, скрипт отрисовывает мета-тег.

Только что всё это проверял, работает идеально.

Ответить на комментарий


31.07.2013 18:39:57 Антон:
Спасибо большое, всё работает. Первые дубли пошли на уменьшение.

Ответить на комментарий


21.08.2013 14:14:55 Евгений:
Вопрос - в Джумле разбиение на страницы сделано через знак ?
Получается, что Вы запрещаете к индексации все страницы, начиная со второй, какого-нибудь списка статей или списка терминов, разбитого на несколько страниц.
Что делать в таком случае?
31.08.2013 15:10:11 Сергей отвечает:
Вы правы. Но я запрещаю к индексации именно страницы списка статей, которые, на мой взгляд, совершенно не нужны в индексе. Сами же статьи из этих списков доступны для индексирования.
Поисковые системы легко найдут их через вашу карту сайта.
13.11.2013 00:22:35 Volodymyr отвечает:
А не проще в РОБОТС закрыть com_virtuemart и оставить для индексации com_xmap? Сильно не бить.
19.12.2013 15:00:38 Сергей отвечает:
И что это даст?

Ответить на комментарий


09.09.2013 15:15:47 гость:
Классные статьи-мне понравились

Ответить на комментарий


12.09.2013 20:54:03 ilya:
Доброго времени суток. Такой вопрос/проблема:
В index.php нет ни <head> ни каких-либо внятных параметров или переменных. В нем хранится примерно следующее:
// No direct access.
defined('_JEXEC') or die;
// enable showing errors in PHP
ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT);
ini_set('display_errors','On');

и т.д.
При попытке вписать туда ваш код, перестают корректно отображаться некоторые меню на главной странице.
13.09.2013 07:46:39 Сергей отвечает:
Значит в вашем шаблоне <head>...</head> находится в другом файле, ищите в этой же папке. Поиск по папкам используйте, в любом редакторе есть типа notepad++ или ST2
14.09.2013 14:36:02 Сергей отвечает:
У кого похожая проблема и вы так и не смогли найти <head> можете попробовать сделать так:
1. В файле \libraries\joomla\document\html\renderer\head.php ищите строки 76-80:
if ($type == 'http-equiv')
{
$content .= '; charset=' . $document->getCharset();
$buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
}

2. Замените на:
if ($type == 'http-equiv')
{
if(preg_match('#\?#', $_SERVER['REQUEST_URI'])){
$noindex = '<meta name="robots" content="noindex, nofollow"/>';
}
else{
$noindex = '';
}
$content .= '; charset=' . $document->getCharset();
$buffer .= $tab . $noindex . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
}

Я не тестировал, но должно работать.

Ответить на комментарий


24.10.2013 00:15:31 Петр:
Здравствуйте. Скажите пожайлуста у меня на сайте почему-то все товары проиндексировались в каждой категории, в результате дублей каждого товара десятки. Как я понимаю данный способ мне не поможет ведь на этих страницах цель разметка не появились?
24.10.2013 00:47:14 Сергей отвечает:
Здравствуйте. Не могу точно ответить, мало информации. Нужно смотреть какие именно URL дублей.
24.10.2013 09:54:15 Петр отвечает:
Сайт http://domofon-vizit.in.ua, дубли на русском языке, например товар domofon-vizit.in.ua/ru/dovodchiki-dvernye/nsk630.html также доступен в категории двери - domofon-vizit.in.ua/ru/dveri/nsk630.htm или в любой другой domofon-vizit.in.ua/ru/bloki-vizova/nsk630.htm и так в каждой категории! Ранее тоже самле было и на украинском языке но один фрилансер изминениями в файле framework.php их убрал. Контактов с етим фрилансером к сожелению нет, и как избавиться от етих дублей я не знаю.
24.10.2013 10:26:44 Сергей отвечает:
Приятный у Вас сайт. Дизайн уникальный или из шаблона?
По существу: думаю способ, описанный здесь, не подойдёт.
Зато вот Вам и всем читающим хороший совет: если нужна мультиязычность, а особенно такая простая как перевод с русского на украинский и обратно, то этот модуль http://gtranslate.net/ - идеально подходит.
Он не то что дубли не создаёт, он вообще не меняет ваши URL, потомоу что переводит страницу "на лету" переводчиком Google. Поддерживает 59 языков. Бесплатен, прост в установке и настройке.

А если не хотите ничего менять, то могу посмотреть, что можно сделать с вашим сайтом, но это уже не бесплатно. Пишите на почту из раздела "Услуги".
24.10.2013 10:42:31 Петр отвечает:
Спасибо. Дизайн заказной. Сначала у меня бил гугл транслейт но хотелось именно оптимизировать сайт для 2 языков, так-как в Украине население двухязычное. Думал что проблем не будет ведь проблему с дублями я решил на украинском языке. Очень странно что именно у меня такое происходит, или ето у всех так?
13.11.2013 00:26:35 Volodymyr отвечает:
При переводе надо удалить псевдоним. Тоесть написали на основном языке и сохранили. VM создала псевдоним. Перевели на другой язык а псевдоним остался от основного языка. Открывать товар и удалять псевдонимы на другом языке.

Ответить на комментарий


31.10.2013 10:14:55 Sealana:
Здравствуйте, уважаемый автор! Очень нужна Ваша помощь! Воспользовалась Вашим советом и ДО добавления в поисковики поставила рекомендуемый код из статьи в <head>. В .htaccess прописала RewriteCond %{HTTP_HOST} ^yamalube.ru
RewriteRule ^(.*)$ http://www.yamalube.ru/$1 [R=permanent,L]
и RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.yamalube.ru/ [R=301,L]
Добавила сайт в Яндекс через Вебмастер и на след. день получила ответ: "DNS-сервер не вернул нашему роботу IP-адрес Вашего сайта, поэтому сайт не был проиндексирован и в поиске не участвует." Я явно где-то перестаралась, но не могу понять, где! Подскажите, пожалуйста, где моя ошибка! Заранее благодарна!
31.10.2013 12:39:53 Сергей отвечает:
Здравствуйте. Это точно не может быть от кода, который Вы прописали в head.
Не могу точно сказать в чём у вас проблема, думаю, дело в настройках домена, обратитесь в техподдержку вашего хостинга.
Кстати, вот IP вашего сайта: 188.93.212.226, как видите, он легко определяется.
31.10.2013 12:44:45 Sealana отвечает:
Спасибо большое за быстрый ответ! Появилось подозрение, что проблема от canonical, которые я не сама прописывала. Не нашла статью на Вашем сайте, как их можно убрать.
31.10.2013 13:01:19 Sealana отвечает:
Сергей, позвольте еще у Вас уточнить? Если в <head> код запрещает адреса со знаками ?,& и =, то поисковик не проиндексирует страницу с ЧПУ, у которой в коде <link href="http://www.yamalube.ru/maslo/category/?manufacturer_id=&label_id=&vendor_id=&page=&price_from=&price_to=" rel="canonical" />? Т.е. одно из двух: или как-то убирать эти canonical, или Ваш замечательный(!!!) код?
31.10.2013 13:18:17 Сергей отвечает:
Проиндексирует. Важна только ссылка, которая в адресной строке браузера, то что в коде - не имеет значения.

А вообще всё просто: если в коде интересующей Вас страницы мета-тег отрисовался - значит эта страница не будет проиндексирована, если мета-тега нет, значит проиндексируется.
31.10.2013 13:19:58 Сергей отвечает:
"DNS-сервер не вернул нашему роботу IP-адрес Вашего сайта" Ещё раз повторюсь, что проблема не в исходном коде.
31.10.2013 13:22:02 Sealana отвечает:
Спасибо большое! Буду решать с техподдержкой. Вам всех благ!!

Ответить на комментарий


15.11.2013 01:27:03 Volodymyr:
А tmpl, task, limitstart можна этим методом закрыть. Если можно то как правильно прописать.
22.11.2013 11:35:30 Сергей отвечает:
Добрый день. Не знаю что такое tmpl и task в Вашем случае, но моим методом можно закрыть всё что угодно, если эти слова находятся в URL.

Ответить на комментарий


19.12.2013 14:43:37 Борис:
Доброго времени суток
Уважаемый Сергей, прописал ваш финальный код там, где вы сказали. Но почему на странице antilopa gold.su/component/virtuemart/tekhnika/model-tanka-kv-1-obrazec-1940-goda-detail?Itemid=0 не появился метатег robots? (пожалуйста уберите пробел для получения рабочей ссылки между antilopa и gold)
19.12.2013 17:24:11 Сергей отвечает:
Добрый день. Есть страницы, на которых данный код сработал? Первое впечатление, что он размещён не в том месте.
Код из статьи должен быть рабочим, я всегда его проверяю, но на всякий случай сейчас скопирую прямо с рабочего сайта, где он 100% работает:
if(preg_match('#\?|^/orders|^/search|/notify$|^/cart|^/manufacturer|^/user|^/2-uncategorised|^/component/|askquestion|vasha-korzina#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
20.12.2013 07:42:51 Борис отвечает:
Доброе утро. Этот код тоже не сработал. Благодарю за попытку
Приведу на всякий случай начало index.php:

<?php
defined('_JEXEC') or die;
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
$app = JFactory::getApplication();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
<head>
<?php if(preg_match('#\?|^/orders|^/search|/notify$|^/cart|^/manufacturer|^/user|^/2-uncategorised|^/component/|askquestion|vasha-korzina#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/abv347_styles.css" type="text/css" />
<meta http-equiv="Cache-Control" content="no-cache"/>
</head>
20.12.2013 09:01:58 Борис отвечает:
Может есть какая-то часть в коде, которая проверяет head и фильтрует его?
J 2.5.11 + VM 2.0.18a
20.12.2013 10:18:14 Сергей отвечает:
Нет.
/templates/za-mag/index.php Сюда разместили?
20.12.2013 10:59:05 Борис отвечает:
Именно там, Сергей. Кибернетика какая-то :)
20.12.2013 11:06:00 Борис отвечает:
Кстати, заметил: на неправильных страницах, начинающихся с component/virtuemart/... в коде страницы стоит тег
<link href="http://www.antilopa gold.su/component/virtuemart/breloki/brelok-gorets-detail?Itemid=0" rel="canonical">
Получается с одной стороны на странице как бы должен появиться robots nofollow, а с другой стороны каноническая ссылка все равно останется неправильной. Наверно если где-нибудь в непубликуемом меню вывесить ссылку на категорию, то и каноническая ссылка поправится и станет вида сайт/breloki/brelok-gorets-detail?Itemid=0. Так решается это противоречие?
20.12.2013 11:31:12 Петр отвечает:
Мне етот код тоже не очень помог. Обащался к Сергею за платной помощю, Virtuemart у меня уже переписан почти полностю, но вроде работает как надо! У меня около 150 страниц, сейчас в индексе около 320, но было почти 800! Сейчас медлено но уверено все приходит в норму...
20.12.2013 13:37:20 Борис отвечает:
Похоже ответ найден. Напишите robots как Robots и всё заработает! Лучше подправить статью, если это так
20.12.2013 15:53:16 Сергей отвечает:
Код полностью рабочий, исправлять нечего. Я установил его уже на 17 сайтов, проблем не было и быть не может.
Естественно, если всё делать правильно :)
20.12.2013 15:54:39 Сергей отвечает:
robots и Robots никак не влияют, и смысла писать с большой буквы нет.
21.12.2013 03:13:49 Fedor отвечает:
joomlaforum.ru/index.php/topic,283336.msg
23.12.2013 13:04:07 Борис отвечает:
Сергей, благодарю. Видимо действительно серверный кэш работал. Остался вопрос, после того как расставил "noindex, nofollow" как сохранить проиндексированные неправильные ссылки. Писать кучу rewriterule?
23.12.2013 13:52:41 Сергей отвечает:
Добрый день. Не совсем понял, что подразумевается под "проиндексированные неправильные ссылки"... Зачем их сохранять?
24.12.2013 08:47:36 Борис отвечает:
В индексе гугла и яндекса ссылки хранятся вида .../component/virtuemart/... А поскольку теперь на них noindex,nofollow стоит то они как понимаю быстро вылетят из индекса. Как быть теперь, чтобы сайт остался в индексе, писать редиректы через RewriteRule?
24.12.2013 11:07:43 Сергей отвечает:
На то они и дубли, что в индексе есть теже самые страницы, только с правильными URL, поэтому я их не сохранял.

Как лучше вам поступить я не знаю. Но если вы собираетесь писать редиректы, то сысла ставить noindex, nofollow не было, его всё равно не увидят поисковики :)

Выходит для вашей задумки noindex и nofollow - лишний шаг.

Ответить на комментарий


18.01.2014 15:41:30 Петр:
У меня етот код работает на половину - дубли на украинском языке убирает, а на русском нет, тоисть дубли типа domofon-vizit.in.ua/ru/dovodchiki-dvernye/6-0-22.html/askquestion?tmpl=component остались. Тоже самое и с корзиной. Может поможете?

Ответить на комментарий


22.01.2014 15:42:25 Светлана:
Сергей, спасибо за рабочее решение.
Сегодня разместила код на сайте. По результатам предварительной проверки все работает.
Буду мониторить, как изменится количество страниц в Гугле. Пока оно превышает фактическое более, чем в 3 раза.

п.с. По результатам обязательно отпишусь.
22.01.2014 17:07:03 Сергей отвечает:
Будем ждать результатов. А на какой CMS сайт? На Джумле? Какие компоненты используете?
22.01.2014 17:36:08 Светлана отвечает:
Да, она самая. Компонентов много. "Проблемный", конечно, Виртумарт.
26.01.2014 19:27:30 Светлана отвечает:
Сергей, здравствуйте.
Кажется, пошли первые подвижки.

Результатов: примерно 2 480 (0,10 сек.)
Против прежнего...
Результатов: примерно 6 840 (0,11 сек.)

Правда, такая динамика пока прослеживается только на основном домене с www. По идее, в скором времени изменения должны появиться и на второстепенном.
26.01.2014 19:35:11 Сергей отвечает:
Здравствуйте, рад за Вас. Ваш сайт доступен так:
http://site-on.net
и так:
http://www.site-on.net
?
Если да, то это очень плохо, нужно склеить эти 2 адреса в один с помощью файла .htaccess и 301 редиректа. Если вкратце, то вот так:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
30.01.2014 17:04:17 Светлана отвечает:
Сергей, здравствуйте!
Спасибо за внимание к моей проблеме.
Нет, домены склеены уже давно (более года). Спасибо коллегам-сеошникам - в свое время щелкнули по носу :)
А страницы сейчас вернулись в индекс. И теперь их опять более 6 тыс.
Буду наблюдать за ситуацией.

Ответить на комментарий


05.02.2014 16:02:45 Иван:
Добрый день Сергей!
Ответьте пожалуйста на вопрос: Мой сайт давно проиндексирован и ссылки имеют тип http://site.ru/index.php/myagkaya-mebel и они теперь соответственно имеют определённый вес для поисковой машины, занимают определённое место в ТОПе, я теперь в CMS Joomla 2.5.17 поставил перенаправление в админке, и внутри сайта у меня теперь url виден без index.php(http://site.ru/myagkaya-mebel), МОЖНО сделать так???, чтобы были проиндексированы страницы без index.php, но эти же страницы имели вес уже проиндексированных ДУБЛЕЙ.
И ВТОРОЙ ВОПРОС, это про ваш код который вы показали, у меня дублируются страницы типа:
http://site.ru/kukhni/mebelritm/85-tovarnye-gruppy/korpusnaya-mebel
ОРИГИНАЛ ТАКОЙ СТРАНИЦЫ:
http://site.ru/kukhni/mebelritm
причем цифры перед tovarnye-gruppy могут быть разные
И ТАКОГО ТИПА:
http://site.ru/korpusnaya-mebel/niemi/85-korpusnaya-mebel
ОРИГИНАЛ ТАКОЙ СТРАНИЦЫ:
http://site.ru/korpusnaya-mebel/niemi
причем цифры перед korpusnaya-mebel могут быть разные
ПОМОГИТЕ ПОЖАЛУЙСТА, СПАСИБО!
В предыдущий раз не туда отправил), sorry
06.02.2014 09:26:58 Сергей отвечает:
Добрый день. Да, это возможно. Нужно в файле .htaccess, который лежит в корне сайта прописать 301 редирект, приблизительно это будет выглядеть так:
RewriteCond %{REQUEST_URI} ^/index.php/(.*) [NC]
RewriteRule ^/index.php/(.*) http://site.ru/$1 [R=301,L]
Скорее всего пример с ошибкой, отлаживать нет времени, главное, что вы поняли в какую сторону смотреть.
06.02.2014 10:04:33 Иван отвечает:
Спасибо за ответ!
А вы сталкивались с таким случаем дублей страниц:
ОРИГИНАЛ ТАКОЙ СТРАНИЦЫ:
http://formatinfo.ru/kukhni/mebelritm
ДУБЛЬ СТРАНИЦЫ:
http://formatinfo.ru/kukhni/mebelritm/85-tovarnye-gruppy/korpusnaya-mebel
Причём таких дублей огромное количество, в robots.txt запрещаю "85-tovarnye-gruppy" а на следующий день появляются дубли типа "88-tovarnye-gruppy"
А tovarnye-gruppy - это категория в менеджере категорий joomla у меня, как закрыть категории?

Ответить на комментарий


01.03.2014 11:36:04 Максим:
Сергей, замечательный сайт, познавательный!
Есть вопрос.
Как сделать, чтобы при использовании кнопок для соц сетей (когда, к примеру, в facebook отправляется ссылка на страницу с описанием и картинкой), не предлагались все подряд картинки и иконки, а только конкретно заданная?
01.03.2014 15:52:18 Сергей отвечает:
Для этого придумана микроразметка. Почитайте статью, чтобы лучше понять, что она из себя представляет. Только в статье сделан упор на Schema.org, а вам нужна Open Graph.

Если коротко, то вот так:
<meta property="og:image" content="http://greenwood-studio.org/g/images/wideTree.jpg" />
01.03.2014 15:54:15 Максим отвечает:
Ок. Сейчас гляну, спасибо за наводку!
28.03.2014 13:39:23 Артур отвечает:
Здравствуйте. Метатег robots вообще не формируется, даже через админку. Как исправить ситуацию?
10.09.2014 14:34:18 Влалд отвечает:
Получается, с этой командой закроються от индексации страницы пагинации?
10.09.2014 19:58:45 Сергей отвечает:
Да.
15.12.2014 05:35:34 Руслан отвечает:
А как бы с Joomshopping?
15.12.2014 20:08:25 Сергей отвечает:
Точно также: составляете регулярное выражение, которое подойдёт вашей структуре сайта.
15.12.2014 22:44:24 Петр отвечает:
Сергей подскажите пожайлуста, с вашей помощю мне удалость убрать часть дублей но хочется идеального ефекта. Можно ли сделать так чтобы закривались от индексации все страницы которых нету в карте сайта либо например в текстовом файле?
Другой вопрос - можно ли бороться с дублями методом переадресации на 404 страницу в файле .htaccess? Ну типа вручную все дубли переадресовываем на 404 страницу которая отдает ответ сервера 404 либо 410?
17.12.2014 21:33:51 Сергей отвечает:
По поводу первого вопроса - можно.

Лучше не переадресовывать, а просто выдавать 404. Но думаю можно и с переадресацией.

Ответить на комментарий


31.01.2015 20:10:06 Александр:
Добрый день!
Сегодня по рекомендации https://plus.google.com/u/0/+AndreyLipattsev/posts/cEF8ACBPD9x?cfem=1 прочитал Вашу статью.
Подходит ли Ваш метод для CMS Сайты Google (http://sites.google.com/)?
31.01.2015 21:20:12 Сергей отвечает:
Не слышал про эту CMS, похожа на обычный Ucoz... а значит у вас нет доступа к программной части.

Метод подходит для абсолютно любого сайта на PHP.

Ответить на комментарий


10.02.2015 23:03:48 Никита:
Доброго времени суток. У меня довольно-таки маленький сайт и проблема дублей возникла у страниц фото галереи (Phoca gallery) при появляющейся пагинации. Скажите, тут тоже следует использовать данный метод, или можно воспользоваться чем-то другим?
Так же хотелось бы понимать, по какому принципу вы ставите обратный слеш (экранирование спецсимволов)? Насколько я понимаю, для моего случая нет необходимости перечислять в выражении все условия, перечисленные в вашем примере, достаточно знака вопроса? И наконец, используя этот метод, обязательно ли вносить изменения в .htaccess, и если да, то какие (для условия \?). Заранее благодарю.
11.02.2015 20:15:17 Сергей отвечает:
Добрый вечер.

1) Не видя сайта не могу советовать. Я дал универсальный инструмент, дальше каждый сам должен разобраться как и где его использовать.

2) Нет необходиомсти перечислять все условия, каждый должен их составить для своего сайта сам. Я показал рабочий пример, который до сих пор используется и будет использоваться на многих моих сайтах.

3) Каждый спецсимвол что-то означает (конец строки, начало строки, количество символов и тд.), если Вы не желаете использовать эти свойства, а просто хотите объяснить PHP, что знак вопроса это просто знак вопроса, нужно его заэкранировать. Полный список спецсимволов можете спросить у Гугла, вот самые распространенные: ^,?,$,*,+.

4) .htaccess тут не используется. Ничего в нём делать не нужно.

Ответить на комментарий


14.02.2015 01:03:56 Андрей:
Прочитал, очень полезная статья!
1) И сразу возник вопрос - я также задумался над устранением дублей и теперь встал основной вопрос - что использовать:
- Ваш код
или
- компонент sh404SEO (или его аналоги)?
2) второй связанный вопрос:
- правильно ли у меня настроен ЧПУ (если посмотреть на все ссылки на сайте), и в данном случае моего сайта, заработает ли Ваш код как надо, оставив в индексе поисковиков исключительно ссылки типа http://repetitor-city.ru/repetitory-po-matematike ?

Вот сам сайт: http://repetitor-city.ru

Жду Вашего скорого ответа, т.к. решение принимать нужно скоро, спасибо :-)
14.02.2015 11:06:42 Сергей отвечает:
1) Если бы сайт был мой, я бы никогда не использовал компонент sh404SEO, когда можно всё решить самому, без установки тяжеленных компонентов. Но конечное решение принимать Вам.

2) К сожалению, смотреть на все ссылки Вашего сайта у меня нет времени. Мой код заработает как надо, если Вы как надо составите регулярные выражение под Ваш ресурс.
15.02.2015 01:25:28 Андрей отвечает:
Спасибо, Сергей!
Сейчас как-раз тестирую на локальном сервере, и попробую обойтись без sh404sef на данный момент - так же слышал, что он тяжёлый и может тормозить систему.
Кстати до того, как узнал все эти способы, Google успел проиндексировать 821 страницу! А на самом деле их сейчас около 80.
После применения регулярного выражения лишние страницы повалят самостоятельно из индекса прочь или нужно будет вручную их удалять из панели вебмастера Google?
15.02.2015 02:53:14 Андрей отвечает:
В добавок к предыдущему сообщению...
Заметил, что на страницах, где данное регулярное выражение сработало, после тега <head> идёт
<meta name="robots" content="noindex, nofollow" />
а на пару строк ниже идёт
<meta name="robots" content="index, follow" />
- это нормально? последняя не должна удаляться/заменяться первой?
15.02.2015 11:21:33 Сергей отвечает:
1) Лишние страницы повалят из поисковой выдачи самостоятельно, главное чтобы они не были закрыты в robots.txt

2)Нет, это не нормально. <meta name="robots" content="index, follow" /> нужно отключить в настройках Joomla. Только сходу не могу подсказать где, так как у меня такой проблемы не было.
15.02.2015 12:42:50 Андрей отвечает:
2) Может заходим в пункт меню, а там в "Метаданные", чтобы отключить?
Но даже, если это не нормально, я подозреваю, что робот, увидев первый тег "noindex, nofollow" должен сразу покидать страницу и, соответственно, он уже не заметит следующий тег "index, follow", т.е. не должно быть критично? Поправьте, если ошибаюсь?
15.02.2015 20:03:41 Сергей отвечает:
В помощи Яндекса и гугла должно быть точно описано это поведение. Я точно не помню, возможно приоритет всегда у index, follow, а порядок не важен.
23.02.2015 00:12:34 Андрей отвечает:
Спасибо, Сергей!
В итоге всё получилось (пришлось пошаманить в некоторых файлах, чтобы убрать лишние вышеописанные мной теги) и мой код выглядит теперь так:
<?php if(preg_match('#\?|&|%|component.*|userslist.*|b2jcontact.*#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
10.03.2015 11:01:16 Андрей отвечает:
А адреса каких страниц вообще содержат знак %? И нужно ли их закрывать?
А то сначала я их закрыл данным выражением, а потом оказалось, что у некоторых пользователей имя юзера в адресе прописано кириллицей и слово Андрей превращается в такой набор символов %5B%3A (в адресной строке)..... и т.д. Пришлось убрать символ % из регулярных выражений.
18.05.2015 11:43:05 Андрей отвечает:
Цитата: "15.02.2015 11:21:33 Сергей отвечает:
1) Лишние страницы повалят из поисковой выдачи самостоятельно, главное чтобы они не были закрыты в robots.txt"

Сергей, а какие папки в robots.txt нужно временно открыть, чтобы проиндексированные дубли повалили из индекса? Речь идёт о странице repetitor-city.ru/nashi-repetitory и отдельных страницах профилей пользователей.
Я думал, что временно открыть папку /components/ , но страницы не особо повалили из индекса Гугл, может надо ещё открыть /libraries/ или другие?
20.05.2015 20:06:24 Сергей отвечает:
Добрый день. Ответ в вашем вопросе. Чтобы дубли пропали из выдачи нужно эти дубли и открыть в robots.txt, и не временно, а на всегда.
У вас в индекс поисковых систем попали страницы с /libraries/ ? Сомневаюсь. А вообще лучше всего в robots.txt оставить только карту сайта и Host.
25.05.2015 09:54:42 Андрей отвечает:
1) Цитата: "А вообще лучше всего в robots.txt оставить только карту сайта и Host."

Но тогда получается это противоречит Вашей статье про robots.txt:
http://site-on.net/optimization/5-robots

и всё ниже перечисленное надо вообще стереть?
Disallow: /administrator/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /images/
Disallow: /includes/
Disallow: /language/
Disallow: /libraries/
Disallow: /logs/
Disallow: /media/
Disallow: /modules/
Disallow: /plugins/
Disallow: /templates/
Disallow: /tmp/
25.05.2015 20:39:29 Сергей отвечает:
Я не проверял, но думаю можно стереть. На сколько я помню нужно будет оставить хотя бы 1 пустую строку Disallow:
26.05.2015 22:21:00 Андрей отвечает:
Понятно. Впрочем насколько я понял, мы закрываем директории от ботов лишь для того, чтобы уменьшить нагрузку на сервер ...
А директорию /administrator/ тоже можно убрать из этого списка?
30.05.2015 12:25:27 Сергей отвечает:
Да, вы правильно поняли. Потому что для дублей сейчас нужно пользоваться тегом canonical и тегом noindex, nofollow. Администратор тоже убрать, но я бы советовал закрыть папку администратор с помощью .htaccess (либо по ip (я об этом писал в статье про то как убрать признаки Joomla), либо по дополнительному паролю через этот файл).
31.05.2015 00:38:38 Андрей отвечает:
Спасибо за отзывчивость, понятные и доступные рекомендации =)

Ответить на комментарий


22.02.2015 10:51:11 Юрий:
Здравствуйте, Сергей!
Как использовать Ваши рекомендации для сайта на WordPress?
Какой должен быть код?
Спасибо.
22.02.2015 15:59:04 Сергей отвечает:
Добрый день. Всё зависит от структуры Вашего сайта, поэтому Вам виднее :)

Ответить на комментарий


19.03.2015 23:57:16 Дмитрий:
Добрый день отличная статья. Не знаю ответите или нет, но попытаюсь ) Хотелось бы уточнить некоторые моменты: как я понимаю данный код проверяет имеется ли в адресе ссылки символы % ? & и если условие выполняется то программа выполняет инструкцию nofollow и noindex проще говоря запрещает страницу к индексу. Правильно? Получается так будет с любой страницей сайта даже если я использую компонент k2. Если это так то получается можно забыть о дублях страниц в k2? Да и вообще для любого компонента ведь так? В любом случае спасибо уже за статью но если ответите будет круто)
20.03.2015 07:22:34 Сергей отвечает:
Да, Вы всё правильно поняли. Хотя это и вытекает из статьи, но хочу обратить Ваше внимание, что НЕ всегда страницы со знаком ? и тд. нужно закрывать от идексации, вдруг какой-то Ваш компонент не поддерживает ЧПУ, но Вы желаете чтобы его страницы находились в индексе.

Поэтому я всегда здесь пишу, что ценность данной статьи в самом подходе, а не в том, чтобы тупо скопировать код из данной статьи. Поэтому если Вашему проекту подходят перечисленные условия, то можете смело копировать, а если нет, то измените их и опять-таки, смело копируйте :)
21.03.2015 19:30:53 Дмитрий отвечает:
Большое спасибо за ответ Сергей. Вы знаете действительно все ответы на вопросы есть в статье когда перечитал все увидел просто когда читал первый раз температурил и не уловил суть. А вообще вы сделали действительно нужное и главное простое решение для избавление от дублей. Большое спасибо.

Ответить на комментарий


09.04.2015 13:52:24 Алексей:
Вот Вы настоятельно рекомендуете закрывать от индекса "?". А как тогда быть с пагинацией? Например, у меня прописана функция добавляющая к Титлам "- 2/3/4...200 страница", что уникалит данные страницы для поисковиков и мне от этого приятно.
Как можно отдельно, не блокируя весь "?", заблокировать например такие адреса
Disallow: /*?tmpl
Disallow: /*?amp
Disallow: /*?page
09.04.2015 19:35:05 Сергей отвечает:
Я считаю что страницы пагинации ухудшают поисковое продвижении, так как не содержат уникальной информации отвечающей на конкретный вопрос. Одна страница дублирует другую на 90%, тем самым отнимая у друг друга ценность.

Ответ на ваш вопрос:
'#.*\?tmpl#'
примерно так. А вообще в регулярках нет ничего сложного, советую самостоятельно разобраться, чтобы подходить к этому вопросу осознанно. Тем более ссылки с чего начать есть в этой статье. А дальше продолжаете копать. По времени это пару часов.
18.04.2015 00:46:03 Андрей отвечает:
да, но если страницы пагинации содержат список товаров или список пользователей, у которых у каждого короткое разное описание, то почему Вы говорите про 90% одинакового содержания?

Ответить на комментарий


17.04.2015 23:36:18 Владислав:
Здравствуйте!
Поставил Ваш код. Перед этим изучил много информации, и выделил для себя, что Ваш замечательный код, это пожалуй самое лучшее, что можно было придумать для Joomla, которая славится своей проблемой "дубли страниц", как говорится: "все гениальное-просто"!
Сайт только запустил, но еще не проиндексирован, определил для себя регулярные выражения. Наконец Яндекс проиндексировал NN-ое кол-во страниц, вот что получилось:

kletkishop.by/component/virtuemart/dlya-ptits/1-kletki-dlya-ptic/10310067-fop-chiara-natura-detail?Itemid=0

Мой код:
<?php if(preg_match('#\?|\%|^/search|/notify$|/cart|/manufacturer|^/user|^/2-uncategorised|/customfilters|/9-uncategorised#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>


В Исходном коде данной страницы отображается:
<meta name="robots" content="noindex, nofollow" />
....далее.....
<link href="http://kletkishop.by/catalog/dlya-ptits/1-kletki-dlya-ptic/10380010-fop-evita-bianca-detail" rel="canonical" />



Вопрос 1: Должен ли был бот яндекса индексировать эту страницу, если стоит: "noindex, nofollow"
Вопрос 2: Простите за мою неграмотность, но я не знаю, как в этом случае влияет rel="canonical". Это означает: что неправильная ссылка, там где стоит "canonical", и бот её не проиндесирует? Как работает механизм индексации в данном случае, что будет делать бот, когда такое увидит?
Вопрос 3: Первое, что мне приходит в голову, это добавить в код '/component' и ждать, когда проиндексируются правильные страницы, вида:
kletkishop.by/catalog/dlya-ptits/1-kletki-dlya-ptic/10380010-fop-evita-bianca-detail
18.04.2015 00:41:41 Андрей отвечает:
1) не должен
2) canonical говорит о том, что именно страницу с адресом который Вы указали последним, именно её надо индексировать
3) я бы добавил

Мнение автора интересно узнать в данном вопросе так же ;-)
18.04.2015 09:03:55 Сергей отвечает:
Присоединяюсь к ответам Андрея.
18.04.2015 18:11:50 Владислав отвечает:
Мое беспокойство было поп поводу canonical. Насколько я понял из ответа Андрея, бот должен проиндексировать "правильную" страницу, т.е. ту ссылку, где стоит указание canonical.
Если так, то я спокоен. Скорее всего это Yandex просто хапнул старый sitemap и с опозданием проиндексировал его, или что-то вроде того.
Я добавил в регулярные выражения '/component', т.к. страницы такие мне однозначно не нужны. На "правильных" страницах, вида ???.by/catalog/dlya-ptits/1-kletki-dlya-ptic/..... тег "noindex, nofollow" не отображается, а значит эти страницы проиндексируются. Сидим и ждем спокойно результата.......
18.04.2015 23:46:46 Сергей отвечает:
Да, я тоже подумал, что возможно Яндекс содержит устаревшую информацию, и при следующем обновлении дубли исчезнут.

Главное чтобы в robots.txt все страницы были открыты. Кстати, все css, js и файлы шрифтов тоже должны быть открыты для индексации, иначе Гугл не сможет распознать дизайн сайта.
19.04.2015 20:59:49 Владислав отвечает:
??? "все страницы были открыты"

при таком robots.txt все ОК? или нет?

User-agent: *
Disallow: /administrator/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /images/
Allow: /images/stories/virtuemart/
Disallow: /includes/
Disallow: /language/
Disallow: /libraries/
Disallow: /logs/
Disallow: /media/
Disallow: /modules/
Disallow: /plugins/
Disallow: /templates/
Disallow: /tmp/
Disallow: /*.pdf$
Disallow: /*.doc$
Sitemap:
19.04.2015 21:11:30 Сергей отвечает:
Да, ок. Только у вас закрыты стили, это плохо. Нужно добавить:

Allow: /templates/*.css$
Allow: /templates/*.js$
Allow: /templates/*.png$
Allow: /templates/*.gif$
Allow: /templates/*.jpg$
Allow: /templates/*.jpeg$
Allow: /templates/*.ttf$
Allow: /templates/*.eot$
Allow: /templates/*.svg$
Allow: /templates/*.woff$
Allow: /media/*.css$
Allow: /media/*.js$
Allow: /media/*.png$
Allow: /media/*.gif$
Allow: /media/*.jpg$
Allow: /media/*.jpeg$
Allow: /media/*.ttf$
Allow: /media/*.eot$
Allow: /media/*.svg$
Allow: /media/*.woff$

Скоро обновлю статью, добавлю этот момент.
19.04.2015 21:39:40 Сергей отвечает:
Обновил статью про robots.txt
20.04.2015 18:54:42 Владислав отвечает:
Спасибо Вам БОЛЬШОЕ!!!

Ответить на комментарий


26.07.2015 21:40:25 Гость:
Их запрет к индексации в robots.txt – защита от seo-спама

Ответить на комментарий


05.10.2015 07:35:47 Linda:
Добрый день, Сергей!
Очень оригинальное у вас решение, хотелось бы его попробовать=)
Подскажите, у меня такая ситуация, взломали сайт и теперь я яндекс вывалилось 4 тыс страниц, в гугл 7( все ссылки вида сайт.ру/xxxxx.php. Как при помощи вашего кода можно их брать? Спасибо!
07.10.2015 19:58:19 Сергей отвечает:
Не могу сказать не видя сайта. Смотря какого вида остальные ссылки.
22.10.2015 19:46:02 Галина отвечает:
Сергей,присоединяюсь к Linda,у меня точно такая же проблема!!!4000 страниц проиндексировались моментально.Многие из них начинаются с цифр,например: sits.ru/316-igrovie-avtomat.html Поставила в роботсе:Disallow: /5* (на все цифры с 1 до 9) и почему-то не работает. Как на такие страницы написать ваш php ? Может вот так будет правильно: preg_match('#^/5.#', $_SERVER['REQUEST_URI']) Будет ли запрет действовать на страницу с /543-игровой автомат или только на /5-игровой автомат. Я думала,что можно поставить запрет на слова "игровые автоматы",но их слишком много в разных падежах. Или на слова "игровые автоматы" будет правильнее и эффективнее?
22.10.2015 19:49:53 Галина отвечает:
Сергей,добавлю к моему комментарию: эти страницы с цифрами в ЧПУ основаны на скриптах и начинаются <html><script>;eval(function(w,i,s,e) ,найти скрипт в файлах аккаунта хостинга не могу.Но использовала скрипт,который убирает во всех файлах,которые находит eval.Однако страницы никуда не делись. Хочу хотя бы убрать их из индекса. Заранее спасибо.
22.10.2015 20:06:25 Галина отвечает:
Еще вопрос: у меня Вордпресс.Я должна поставить этот код в index.php,который находится в / public_html / wp-content / themes /моя тема Правильно?
22.10.2015 21:49:17 Сергей отвечает:
Попробуйте что-то в этом роде:
preg_match('#^/[0-9]+#', $_SERVER['REQUEST_URI'])
Будет действовать и на /543-игровой автомат и на /5-игровой автомат.

/public_html/wp-content/themes/моя_тема/index.php - если в нем есть тег <head>

Есть он там или нет, зависит от разработчика шаблона. Если нету - ищите в соседних файлах.
23.10.2015 08:57:51 Галина отвечает:
Спасибо,Сергей.А я поставила цифру с * Но <head> не в index.php,а в header.php. Видимо такой шаблон. Спасибо огромное!!!!Надеюсь,что поможет.
23.10.2015 22:37:39 Сергей отвечает:
Главное проверьте, что мета-тег появился на нужных страницах. Пожалуйста.
30.10.2015 07:36:17 Галина отвечает:
Сергей,спасибо,что помогаете. Я поверила в ваш метод,потому что он через пару дней дал уже результат: с 2000 в Яндексе упало до 1000. Я надеялась,что Яндекс и оставшиеся уберет из индекса,но еще через пару дней в Яндексе появилось 9000 страниц.Я полезла в файл,проверить ваш код и что вижу? Какая-то сволочь корректирует мои файлы как у себя дома: вместо вашего кода(на этом же месте) стоит совсем другой.Я не умею читать коды,но вижу,что код говорит о том,что нужно проиндексировать все,что найдет в архиве,в поиске и отменяет все нофоллов и ноиндекс. Представляете!!! Еще на всех файлах темы поменяны права с 644 на 755.Как это делается,если я поменяла все пароли?Или спецам раз плюнуть новые пароли открыть? На этих страницах я не могу проверить мета-тег,потому что их содержимое находится между тегами <script>.Может всречались когда-нибудь с таким и знаете лекарство? Хотя бы где искать код,который активирует это скрипт?Спасибо.
01.11.2015 12:47:39 Сергей отвечает:
1) сменить все пароли на ФТП, базу данных и хостинг-аккаунт
2) очистить историю в браузере, куки, пароли и тд.
3) Воспользоваться советами из статьи про борьбу с вирусами на сайте.

Ответить на комментарий


22.11.2015 22:47:33 Владислав:
Сергей, здравствуйте!
Я поставил Ваш код в апреле 2015г.
У меня по sitemap около 750 страниц. В яндексе было 5000, недавно стало больше 8000.
В апреле я запретил к индексации страницы, начинающиеся со слова /component, на этих страницах отображается тег "noindex, nofollow", однако они все равно индексируются...

Вот так выглядит мой код:
'#\?|\%|^/search|/notify$|/cart|/manufacturer|^/user|^/2-uncategorised|/customfilters|/9-uncategorised|/component#'

Вот такая строка есть в robots.txt
Disallow: /components/
отличие от слова в коде, на конце буква "s"

Возможно ли, что это накладывается друг на друга и поэтому страницы индексируются?
У меня два варианта решения:
1) убрать эту строку из robots.txt
2) поставить знак ^ в выражении /component что бы знаменовать начало строки
вот так: ^/component
? но на этой же странице отображается "noindex, nofollow"
Спасибо!

Ответить на комментарий


22.11.2015 22:51:38 Владислав:
Вот так выглядит типичная url, которую я хочу запретить
/component/customfilters/akva-eheim/?custom_f_73[0]=d0a8d0bbd0b0d0bdd0b3

Все они начинаются со слова "/component"
23.11.2015 20:12:10 Сергей отвечает:
Добрый вечер. Мне интересно глянуть на Ваш сайт. Первое что приходит в голову:
1) написать Яндексу с этим вопросом
2) проверить чтобы на странице не было второго мета-тега robots, который разрешает индексирование. Например:
<meta name="robots" content="index" />
25.11.2015 00:08:10 Владислав отвечает:
Сергей, спасибо за ответ
сайт: kletkishop dot by
я бы хотел заказать $, если возможно, проверку по внутренней оптимизации и подлатать дыры. Еще сайт медленный, что можно сделать?
P.S. сайт делал сам для себя, никогда раньше этим не занимался, это мой первый), поэтому там много ошибок, насколько я понимаю
25.11.2015 00:21:03 Владислав отвечает:
Гугл кстати пишет, что проиндексировано всего: 805 страниц
25.11.2015 00:40:56 Владислав отвечает:
Проверил страницу такого плана:
/component/customfilters/akva-eheim/?custom_f_73[0]=d092d0bdd0b5d188d0bdd0b8d0b

стоит только такой тег:
<meta name="robots" content="noindex, nofollow" />
25.11.2015 00:51:05 Владислав отвечает:
В меню админки в некоторых "меню" в пункте "метаданные" я когда-то проставил: "Index, Follow"
Может поэтому?
Но все же, в исходном коде странице нигде нет тега, разрешающего индексацию, только noindex, nofollow
25.11.2015 20:03:03 Сергей отвечает:
Новые заказы в данный момент не беру. И вообще стараюсь с CMSками не работать - перешел на PHP фреймворки.

В вашем случае я бы написал в тех. поддержку Яндекса и спросил причины у них, заодно интересно увидеть их ответ, если Вы им поделитесь.
25.11.2015 23:12:59 Владислав отвечает:
Я немного переделал свой код, сегодня уже -1000 страниц

Ответить на комментарий


29.12.2015 11:05:39 Владимир:
Этот подход не до конца решает проблему так как страница конкретного товара может открываться в разных категориях, а иногда и без категории. Например:
http://site.ru/kolbasa/krakovskaya.html
http://site.ru/krakovskaya.html
Тогда обе страницы будут в индексе. Но это дубли!
Я решил эту проблему след. образом:
Сделал в БД лишнее поле - canonical и сформировал такую же переменную, наряду с description и keywords в форме добавления товара. В это поле вручную прописываем канонический УРЛ. И всё, дело в шляпе!
В хедере страницы пишем похожий PHP скрипт, который сравнивает текущий URI с переменной canonical. Есть совпадение - ничего не делаем, нет совпадения - вставляем значение переменной в метатег canonical.
Т.о. индексируются ТОЛЬКО канонические УРЛ, которые прописаны ручками.

Ответить на комментарий


06.02.2016 00:33:22 Тимур:
Здравствуйте,Сергей. Интересует данный метод для osStore.Не могли бы Вы подсказать как применить мета-тег robots со значением content="noindex в Opencart.Вот ссылка где не много есть информации как это сделать на основе Вашего метода,но выходит ошибка у меня.Буду очень признателен за помощь.
https://opencartforum.com/topic/42889-howto-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-%D0%BC%D0%B5%D1%82%D0%B0-%D1%82%D0%B5%D0%B3%D
0%B8-noindex-nofollow/?hl=%2Bseofix+%2Bnoindex

Ответить на комментарий


18.03.2016 07:55:39 Виталий:
Добрый день, в joomla 3 произвели внедрение поддержки канонических URL (атрибут rel=»canonical»), как это помогает с индексацией дублей страниц и нужно ли производить настройку?

Ответить на комментарий


23.11.2016 22:09:02 Владимир:
Замечательная статья! Два месяца безуспешной борьбы с дублями и, вроде бы, нашел тут решение своей проблемы. Если хоть что-то понимал в программировании, наверное, мог бы что-то еще сказать доброе! Но ... хотя в Вашем деле ничего не понимаю, в статье оказалось достаточно сведений, позволивших мне немного "пошаманить" на своем сайте и ... О ЧУДО! в исходном коде страниц для печати и некоторых иных дублей появилась долгожданная запись о запрете на индексирование.
Скрипт только что установил, ничего еще не могу сказать о результатах индексирования сайта поисковиками; по факту напишу.
Единственное, что у меня не получилось, так это закрыть страницы типа корень сайта/biography?imz_s=7fh4n7j8d9f0c8 Откуда они взялись - не знаю, но этим скриптом закрыть их не получается.
А и еще: где-то допустил ошибку, наверное, так как страницу /search также не закрывает, хотя по /searching срабатывает. Сейчас у меня записано так:
<?php if(preg_match('#\^/search|/searching|^/action|print|^/imz|^/request|url|^/request|lang|^/index|php|^/4fb34720|^/3836e380/#', $_SERVER['REQUEST_URI'])){ ?>
<meta name="robots" content="noindex, nofollow" />
<?php } ?>
Составлял методом "научного тыка", заменяя в предложенном Вами основном варианте названия страниц на свои, поэтому на вопрос "почему так?" ответить ничего не смогу :)
Посмотрите, пожалуйста, если не сложно, где ошибка и как прописать в скрипте запрет на индексацию страниц с ?imz_s=
Буду очень признателен!
С уважением,
25.11.2016 10:15:58 Владимир отвечает:
Сегодня в Гугле минус 16 страниц! Осталось еще около 50-ти. Ждем-с ...
25.11.2016 18:11:07 Владимир отвечает:
А сейчас плюс 11 ... Надеюсь временно.
25.11.2016 19:52:55 Владимир отвечает:
Только что - минус 13. Наверное, Гугл "со скрипом" воспринимает то, что я ему "спрограммировал", пытается понять мою логику, сомневается ... :) "Тормозной" Яндекс пока молчит.

Ответить на комментарий

Использую для работы
Мои расширения
Свежие статьи
Рекомендую
Горячо обсуждаемые
Подписка
  • Следовать в twitter:
  • Подписаться по RSS:
  • Подписаться по E-mail:
  • Следить ВКонтакте:
  • Следить на Facebook:
Пользовательское соглашение об условиях использования сайта и Политика конфиденциальности
Перепечатывание или копирование материалов сайта (текста, изображений и другого содержимого) для их публичного или коммерческого использования в сети Интернет, либо в печатных изданиях строго запрещены. При нарушении данного правила, с нашей стороны будут предприняты соответствующие меры, вплоть до судебной жалобы.
© site-on.net
Шрифт: +стандартно-