Лечим синдром Яндекс.Директа

Я уже устал повторять Большой Секрет Полишинеля: лишних параметров приличный движок пропускать не должен. Не должен, и баста. Во-первых, это существенно снижает угрозу взлома, а во-вторых, не позволяет наделать дубликатов страниц в индексах поисковых систем. Казалось бы, все ясно и добавить здесь нечего. Тем не менее, на каждое «не нужно», найдется свое «но».

Некоторые пользуются приличными движками, но при этом еще и позволяют себе рекламироваться, например, в Яндекс.Директ. Вот тут-то и начинаются проблемы. Та самая поисковая система, которой не нравятся дубликаты страниц, требует, чтобы движок все-таки пропускал параметр _openstat — это нужно для статистики. А счетчику LiveInternet очень невредно, чтобы проходил параметр from — для тех же целей. И все бы ничего, но Яндекс как-то ухитряется индексировать дубли страниц, которые сам же и наплодил таким способом.

Выход очевиден. Чтобы запустить рекламную кампанию, нужно внушить движку, что параметры эти допустимы, но при формировании страницы ни на что влиять не должны. А чтобы не получить в индексе пачку дублей, надо не давать роботам такие дубли читать. Как обычно, отдавая их с заголовком “404 Not Found” — просматривать в браузере страницу с параметром это не помешает, а боту однозначно даст понять, что считывать ее нельзя.

Хорошо, когда движок компактный и весь его код давно изъезжен собственным носом. Тогда не возникает вопроса, что где править, чтобы работал этот злосчастный параметр. В движке, описанном на AHP-net.ru, все правится достаточно быстро. Но это приятное исключение, сделанное своими руками. Только что мне пришлось лечить Subdreamer — это, надо сказать, достаточно корректный движок, но очень развесистый. И там непросто отыскать в мегабайтах кода то самое место, где нужно хирургическое вмешательство. А сколько еще таких движков? — Я не считал. Но к счастью, все больше.

Задача была поставлена и через полчаса решена полностью. Знакомьтесь с решением, это грубо, но довольно-таки универсально. Имеем неважно какой движок, в котором все запросы с любым URI обрабатывает один и тот же скрипт — обычно, index.php. Если не он, смотрите в .htaccess, кому отдается эта почетная обязанность. И в самом начале этого скрипта, прямо за открывающим тегом <?php, пишем следующую чушь:

Пара объяснений: совершенно неважно, что именно анализирует движок. Но параметры URI он может найти в трех местах: в массиве $_GET и в переменных окружения QUERY_STRING (собственно строка параметров) и REQUEST_URI (исходный запрошенный адрес). Вот оттуда-то мы и удаляем этот злосчастный параметр — тогда движок даже не догадается, что параметр был в запросе и выдаст страницу так, будто его там и не было. А чтобы Яндекс не наелся дублей и не получил несварение, сразу же за этим действием выдается заголовок 404.

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

Top

Категория: Оптимизация

Комментарии Отключены

ЫЫЫх

вот так правильнее и компактнее будет

$str = preg_replace("/\&{0,1}from=$from/", '', $str);

+ плюс еще можно убрать лишний амперсанд, если from стоит первым параметром

$str = preg_replace("/\?\&/", '?', $str);

19.07.2011 // 12:16 [ ссылка ]