Когда ставлю canonical
Canonical ставлю, когда копия зачем-то должна открываться. Так бывает у страницы, которая доступна из нескольких разделов, у версии для печати и у параметра, который не меняет текст, но ссылку с ним уже раздали. В коде копии, в head, указываю абсолютный адрес основной страницы. Один canonical на страницу, без второго рядом.
Канонический адрес должен сам открываться и не указывать каноникалом на следующую копию. В карте сайта я оставляю основной URL. Если в sitemap лежит адрес, который сам ссылается на другой как на канонический, подсказка спорит сама с собой. Поисковик может выбрать иную версию, если внутренние ссылки ведут на копию, а тег указывает в третье место. После правки я смотрю, какой URL Яндекс считает каноническим, а не только строку в шаблоне.
Когда нужен редирект
Редирект выбираю, когда второй адрес человеку больше не нужен. Старый путь после смены URL, лишнее зеркало с www или без www, http при уже рабочем https, дубль index у главной. Человек и робот должны попасть на один основной адрес, без остановки на третьей странице. Как прописать постоянный редирект на сервере, я здесь не разбираю. Для дублей важно правило: редирект — если адрес отжил, canonical — если адрес ещё открывают. Все лишние URL на главную я не отправляю. У копии должен быть прямой аналог.
Когда закрываю от индекса
Закрытие нужно служебным адресам: внутренний поиск, сессия, печать, если её незачем показывать в поиске. Метатег noindex просит не брать страницу в индекс. follow при этом оставляет ссылки для обхода, nofollow режет и их. Если на дубле есть полезные ссылки, я чаще оставляю follow.
Disallow в robots.txt — другая команда. Она просит не заходить на адрес. Робот может не увидеть ни canonical, ни то, что страница повторяет другую. Поэтому дубли, которые нужно распознать как копии, я не прячу запретом обхода. Запрет уместен там, где адрес не должен обходиться вообще.
Для Яндекса и параметров, которые не меняют страницу, есть Clean-param в robots.txt. В директиве перечисляю такие параметры, например метки перехода с рекламы. Тогда робот Яндекса не обходит один и тот же документ заново из-за хвоста в URL. Если директивы нет, остаётся canonical: страницу всё равно придётся открыть, чтобы тег прочитать. Параметр, который меняет содержимое, в Clean-param я не добавляю.
Что проверяю после правки
- Основной URL открывается без редиректа на самого себя и без цепочки.
- Копия либо ведёт редиректом на этот URL, либо содержит один абсолютный canonical на него.
- Служебный адрес закрыт от индекса и не лежит в sitemap.
- В карте сайта только основные страницы, которые должны быть в поиске.
- В Вебмастере статус «Дубль» относится к копии, а не к странице, которую я хотел оставить.
- Внутренние ссылки ведут на основной адрес, а не на хвост с меткой.
Поиск обновляет сведения после переобхода, поэтому в тот же день список исключённых страниц обычно ещё старый. Я сверяю ответ сервера и код страницы сразу, а отчёт кабинета смотрю снова, когда данные обновятся. Если основной URL сам оказался среди дублей, ищу второе указание: лишний редирект, второй canonical или ссылки на копию.
Задача простая. На каждый документ остаётся один адрес, который я готов показать и человеку, и поиску. Остальные либо приводят к нему, либо явно помечены как копии, либо закрыты, потому что это служебный вход, а не страница.