Несколько месяцев назад начал замечать в Яндекс.Вебмастере индексацию дублей страниц со знаком вопроса в конце URL:
- https://libramedia.ru/?
- https://libramedia.ru/blog/?
По времени это примерно совпало с анонсом новой механики в Яндекс.Вебмастере:
Яндекс тестирует новую механику для более точного распознавания поисковых фраз в браузерах с ограничением межсайтовых cookies. Вы можете заметить новый параметр ysclid у части ссылок из результатов поиска на свой сайт. Подробнее
Самое забавное, что ссылок с параметрами ?ysclid я после появления данного анонса не заметил ни разу. Зато сразу на нескольких проектах начали индексироваться дубли страниц с вопросительными знаками в конце URL.
Итак, задача состоит в следующем: избавиться от появления подобных дублей, не повлияв при этом на работу начинающихся с вопросительного знака GET-параметров (что было бы чревато проблемами — например, в Bitrix стандартная пагинация работает путем добавления параметра ?PAGEN_1 к адресам разделов).
Немного подумав, нашел 3 варианта решения — для Apache, nginx и универсальный редирект на PHP.
Редирект через .htaccess
Данный способ подойдет для веб-сервера Apache, поддерживающего директивы из конфигурационного файла .htaccess:
# Убираем знак вопроса в конце URL (/?) RewriteCond %{THE_REQUEST} ^[^\s]+\s+[^?]*?\? RewriteCond %{QUERY_STRING} ^$ RewriteRule .? %{REQUEST_URI}? [R=301,L]
Редирект в nginx
Если вы пользуетесь VPS и отошли от связки nginx + Apache в пользу связки nginx + PHP-FPM, то для избавления от редиректа нужно добавить следующую директиву в блок server конфига интересующего вас сайта:
# Убираем знак вопроса в конце URL (/?) if ($request_uri ~ "^(.*)\?$") { return 301 $1; }
Редирект на PHP
И, наконец, универсальный вариант с редиректом на PHP, который можно использовать если недоступны первые два (например, хостинг на nginx, но нет административного доступа к серверу).
Добавьте следующий код в header.php или любой другой сквозной элемент сайта:
<?php //Убираем знак вопроса в конце URL (/?) $uri = $_SERVER['REQUEST_URI']; $q = strpos($uri, '?'); if ($q === strlen($uri) - 1) { header('HTTP/1.1 301 Moved Permanently'); header('Location: ' . substr($uri, 0, $q)); } ?>
Заключение
Борьба с появлением дублей страниц — одна из базовых задач технического SEO. Во многом помогает правильное внедрение атрибута rel="canonical"
, но использование канонических ссылок не является 100% гарантией отсутствия возникновения различного «мусора» в поисковой выдаче.
Стоит регулярно мониторить отчеты об индексации продвигаемых ресурсов и пресекать возможные проблемы с дублями сразу же после их возникновения.
Здравствуйте, подскажите, как убрать не только знак вопроса в конце url, но другие знаки — * и добавления в конце адреса случайных букв и символов, например https://site.ru/hgf или https://site.ru/* ?
На обращения к заведомо несуществующим страницам сайт должен отвечать ошибкой 404. Если это не так, то либо надо смотреть настройки CMS (например, в Битриксе при некоторых настройках компонентов не будет выдаваться код 404 ошибки), либо обращаться к разработчику сайта (если он самописный и в его основе не лежит какой-либо из общеизвестных движков).
То есть это не тот случай, когда требуется делать редиректы.
https://site.ru/*
Помогите сделать редирект с
https://site.ru/*
на
https://site.ru
Подскажите, пожалуйста, как правильно прописать в robot.txt директиву clean param, чтобы запретить к индексации дубли url со знаком вопроса в конце?
Через Clean-param вы «пустые» знаки вопроса не закроете, эта директива обрабатывает только то, что идет после данных знаков.
На битриксе данный код приводит к невозможности сохранения настроек безопасности группы пользователей в админке. Может и в других местах что-то ломает. А так сам редирект работал.
Да, есть такое. При сохранении настроек Битрикс пытается перейти на /group_edit.php?, с установленным редиректом у него это не получается.
Если через .htaccess делаете редирект, то попробуйте добавить еще одно условие перед RewriteRule:
Для nginx аналог сходу подобрать не могу, там добавление множественных условий в if через какие-то костыли делается.
Спасибо. Так работает.