Логотип seo-prodvizhenie-biznesa.ru
+7 (921) 333-77-45

Робот видит один текст, клиент — другой: как подрядчик подставляет вас под бан за клоакинг

Робот видит один текст, клиент — другой: как подрядчик подставляет вас под бан за клоакинг
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

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

Ниже — что относится к подмене, а что к нормальной адаптации, как это записано в правилах поисковых систем, какими способами различают запрос, где в WordPress живёт такой код и что делать, если нашли.

Что считается подменой, а что нормальной адаптацией

Смысл нарушения в расхождении: по одному адресу робот и человек получают существенно разное содержимое, и различие сделано намеренно, в расчёте на то, что человек не увидит того, что видит робот. Ключевое слово — существенно: немного разный HTML сайт отдаёт при каждом запросе всегда (время, порядок отзывов, счётчики), и это не подмена.

Нормальной адаптацией считается всё, что относится к устройству и языку посетителя и одинаково доступно человеку и роботу: адаптивная вёрстка, изображения в разных форматах, выбор языковой версии, закрытый личный раздел. Правило проверки: если робот и человек на одном адресе в одних условиях получают один текст и одни ссылки — вы в порядке.

Подмена начинается там, где условием различия становится признак «это поисковый робот»: робот получает переоптимизированный текст и ссылки, человек — красивую страницу. Или наоборот: роботу информационная статья, человеку мгновенный редирект на чужой сайт. Промежуточный случай, тоже нарушение, — текст есть в коде для всех, но визуально скрыт.

Что об этом написано в правилах поисковых систем

Это одно из немногих нарушений, описанных прямо и в обеих системах. В правилах Google о спаме есть отдельные разделы про выдачу поиску и пользователям разного содержимого, про вводящие в заблуждение перенаправления и про скрытые текст и ссылки. Яндекс относит к поисковому спаму приёмы для обмана алгоритма, а в разделе диагностики панели вебмастера отдельно перечисляет обманные редиректы, скрытый текст и размещение SEO-ссылок.

Практическое следствие важнее формулировок: это не из тех нарушений, что «может быть, заметят». Поисковой системе достаточно сравнить два своих же запроса — от имени робота и от имени обычного браузера. При систематическом расхождении обнаружение — вопрос времени.

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

Зачем это делает подрядчик

Мотив почти никогда не бывает злым умыслом против клиента. Он экономический, и вариантов пять.

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

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

Виды подмены и по какому признаку различают запрос

Механизмов несколько, и проверять надо все: найденный один не означает, что других нет.

Признак различия Как работает Чем проверяется
Строка User-Agent Сервер или движок смотрит, как называет себя клиент, и подставляет другой блок роботу Запрос страницы с подменённой строкой агента и сравнение с обычным запросом
Сетевой адрес запроса Различие по диапазонам адресов поисковых систем; строка агента при этом не важна Запрос с другого канала связи, инструмент проверки ответа сервера в панели вебмастера
Наличие или отсутствие исполнения скриптов Текст для робота лежит в исходном коде, а скрипт удаляет или подменяет его в браузере Сравнение исходного кода и итогового дерева страницы в инструментах разработчика
Обратная схема на скриптах Содержимое дорисовывается скриптом только для людей, робот видит другое Отключить выполнение скриптов в браузере и перезагрузить страницу
Регион и язык запроса Роботу одного региона отдаётся одно, человеку — другое, под видом геоадаптации Проверка через другой канал связи и сравнение содержимого
Реферер и признак первого посещения Человек, пришедший из поиска, получает редирект; вернувшийся напрямую — нет Переход на сайт из результатов поиска в чистом профиле браузера
Куки и сессия Первый визит без куки получает редирект, дальше страница ведёт себя нормально Открыть в приватном окне или очистить данные сайта

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

Скрытые блоки: чем прячут текст от человека

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

Приём Как выглядит в коде Как найти
Полное скрытие стилями Блоку задано отсутствие отображения или нулевая видимость Поиск по стилям сайта; сравнение объёма текста в коде и на экране
Нулевой или крошечный размер шрифта Размер шрифта в ноль или в один пиксель Поиск подозрительных значений размера шрифта в файлах стилей
Цвет текста в цвет фона Совпадающие значения цвета текста и фона блока Выделить всю страницу мышью: скрытый текст проявится подсветкой
Вынос за границы экрана Большой отрицательный отступ или абсолютное позиционирование далеко за пределы Поиск больших отрицательных значений в стилях
Нулевая высота с обрезкой Контейнер нулевой высоты со скрытием выходящего за границы содержимого Проверка блоков с нулевыми размерами в инструментах разработчика
Текст под картинкой или под слоем Перекрытие элементом с более высоким порядком наложения Отключить фоновые изображения и посмотреть, что под ними
Ссылки в невидимом символе Ссылка обёрнута вокруг пробела или точки в один пиксель Выгрузить все исходящие ссылки страницы и сверить с видимыми

Самый быстрый способ проверки — выделить страницу целиком сочетанием клавиш и скопировать в текстовый редактор. Всё, что появилось в буфере, но не видно на экране, требует объяснения. Подробнее приёмы и последствия я разбирал в материале Скрытый текст на сайте.

Как поймать подмену по строке агента своими руками

Порядок не требует специальных программ: хватит терминала и браузера. Суть — получить одну и ту же страницу дважды, представившись по-разному, и сравнить результат.

Первый запрос делается обычным способом, второй — с подменённой строкой агента на строку поискового робота. Ответы сохраняются в два файла, сравнивается объём, потом содержимое построчно. Разница в паре строк со временем и счётчиками нормальна, разница в тысячи знаков и в списке ссылок — находка. То же повторите для мобильной строки агента: часть блоков подставляют именно в мобильную версию, рассчитывая, что владелец смотрит с компьютера. Про это у меня есть отдельный материал — Проверка мобильной версии глазами робота.

Важное дополнение: определять робота по строке агента ненадёжно, и это работает в обе стороны. Подделать строку может кто угодно, поэтому и подрядчик, и вы легко изображаете робота. Настоящая принадлежность проверяется обратным запросом к службе имён по адресу, с которого пришёл запрос: у робота Яндекса полученное имя должно оканчиваться на доменные имена Яндекса, у робота Google — на его собственные. Этот метод описан в документации обеих систем и применяется для обратной задачи — понять, настоящий ли робот пришёл на сайт.

Если подмена настроена по сетевому адресу, а не по строке агента, ручной запрос с подделанной строкой ничего не покажет. Тогда нужны инструменты со стороны поиска — о них следующий раздел.

Проверка со стороны поиска

У обеих систем есть штатные инструменты, которые запрашивают страницу от имени настоящего робота с настоящих адресов. Именно они ловят подмену по адресу.

В Яндекс.Вебмастере это проверка ответа сервера: инструмент показывает код ответа, заголовки и содержимое страницы так, как их получает робот Яндекса. В панели Google похожую задачу решает проверка адреса с просмотром просканированной страницы: там видно полученный HTML и то, как выглядела страница после обработки скриптов.

Порядок работы: получить одну страницу через инструмент панели и через обычный браузер, сравнить объём и список ссылок. Заодно проверьте несколько типов страниц — подмену часто ставят не на главную, а на категории и карточки, куда владелец редко заходит.

Посмотрите и на сниппеты: если в описании вашей страницы в выдаче встречается текст, которого на ней не видно, дальше искать не нужно. Разрыв между картинкой в браузере и тем, что получает робот, бывает и без умысла — про такие случаи я писал в материале Робот видит ваш сайт совсем не таким, как вы.

Где в WordPress живёт такой код

Если сайт на WordPress, мест ограниченное число, и их можно перебрать за час. Начинать надо с тех, что не видны в списке плагинов.

Место Что искать Признак
Каталог обязательных плагинов Любые файлы в каталоге mu-plugins Подключаются автоматически, в списке плагинов не отображаются и не отключаются
Файл функций темы Обработчики, подключённые к выводу заголовка и к фильтру содержимого Условия с проверкой строки агента или адреса запроса
Основной конфигурационный файл Посторонний код до подключения ядра Любые строки, кроме настроек базы, ключей и путей
Файл правил веб-сервера Правила перенаправления с условием по строке агента или рефереру Условия, упоминающие названия роботов или поисковые домены
Таблица настроек базы Опции с длинным закодированным значением, добавленные плагинами оптимизации Значение выглядит как набор символов, а не как текст
Плагин с безобидным названием Вызовы декодирования и исполнения строк внутри кода Плагин не из каталога WordPress, автор неизвестен, обновлений нет
Шаблоны темы Вставки в подвале и в шапке дочерней темы Блоки ссылок, не соответствующие меню и структуре сайта

Практичный способ отделить своё от чужого — сверка контрольных сумм: консольный инструмент WordPress проверяет файлы ядра и плагинов из официального каталога на соответствие эталонным версиям. Что не совпало и чего нет в каталоге — в список для ручного просмотра. Второй приём: даты изменения файлов, чужая правка обычно выпадает из общего массива.

Ещё одно замечание про скрипты. Иногда на сайте нет никакой подмены, а робот всё равно видит пустую страницу: содержимое дорисовывается скриптом, который робот не выполняет или выполняет с задержкой. Это не нарушение, а техническая ошибка, но лечится она иначе — я описывал её в материале Красивый сайт на JavaScript, который робот видит пустым.

Логи сервера: что в них искать

Журнал обращений к серверу — единственный источник, который видит запросы роботов. Счётчик аналитики их не показывает, потому что работает скриптом в браузере, а робот скрипты счётчика не исполняет.

В логах ищут три вещи: есть ли запросы от роботов и с каких адресов; отличается ли размер ответа для робота и для браузеров на одной странице — при подмене разница видна прямо в отданных байтах; нет ли перенаправлений там, где их быть не должно.

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

Что делать, если нашли

Порядок важен, потому что первое желание — сразу всё удалить — лишает вас доказательств и мешает понять масштаб.

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

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

Разговор с подрядчиком стоит вести письменно и по фактам: что найдено, где, каким способом проверено, когда появилось. Отношения по договору на услуги регулируются главой 39 Гражданского кодекса, и качество результата — предмет требований по договору. Если речь идёт о постороннем коде, оставленном в системе, оценку правовых последствий стоит получать у юриста: здесь возможны составы, выходящие за рамки хозяйственного спора, и заочные выводы тут неуместны.

Что роботу можно отдавать иначе законно

Граница не там, где ответ побайтово одинаков, а там, где различие не создаёт преимущества в выдаче и не обманывает человека. Ниже случаи, которые к нарушениям не относятся.

Адаптация под устройство: разная вёрстка, размеры и форматы изображений — при одном и том же тексте и одних ссылках. Языковые версии по явному указанию и с корректными перекрёстными указаниями. Платный или личный раздел, закрытый одинаково и для человека, и для робота, с честным кодом ответа. Ограничение частоты запросов, применяемое ко всем.

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

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

Если проверять самому некогда или результаты выглядят неоднозначно, начните с бесплатного аудита сайта — сверка содержимого для робота и для человека там входит в техническую часть. А если находка уже есть и вопрос в том, как разговаривать с подрядчиком и что делать с индексом, разберём это на SEO-консультации.

Коротко

  • Подмена — это намеренное существенное расхождение содержимого для робота и для человека по одному адресу. Разница в счётчиках и порядке отзывов подменой не является.
  • Нарушение описано прямо в правилах обеих поисковых систем: раздельное содержимое, обманные перенаправления и скрытый текст. Поисковой системе достаточно сравнить два своих запроса.
  • Отвечает сайт, а не подрядчик. Механизма «это сделали без меня, снимите ограничения» в публичной документации нет.
  • Различать запрос могут по строке агента, по сетевому адресу, по исполнению скриптов, по региону, по рефереру и по куки. Найденный один механизм не исключает остальных.
  • Скрытые блоки прячут стилями, нулевым шрифтом, цветом в цвет фона, выносом за экран и перекрытием слоем. Быстрая проверка — выделить страницу целиком и скопировать в текстовый редактор.
  • Ручная проверка: два запроса одной страницы с разной строкой агента и сравнение объёма и списка ссылок. Подмену по адресу ловят только инструменты панелей вебмастера.
  • Определение робота по строке агента ненадёжно в обе стороны; настоящая принадлежность проверяется обратным запросом к службе имён — метод описан в документации Яндекса и Google.
  • В WordPress смотрят каталог обязательных плагинов, файл функций темы, конфигурационный файл, правила веб-сервера, опции в базе и плагины не из каталога. Помогает сверка контрольных сумм.
  • Порядок действий при находке: сохранить доказательства, сменить доступы, убрать код, перепроверить, поискать сопутствующие нарушения, сообщить через панель вебмастера.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Комментарии

Игорь

Проверил свой сайт двумя запросами, как описано. Разница в объёме почти вдвое, в версии для робота внизу блок текста с перечислением городов и четыре ссылки на незнакомые домены. Подрядчик ушёл больше года назад. Что делать в первую очередь?

Анатолий Кузнецов автор

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

Светлана

Способ с выделением всей страницы и копированием в редактор оказался самым простым. Нашла у себя абзац с ключами, выведенный шрифтом в один пиксель под подвалом. Визуально его нет вообще.

Максим

А если подрядчик говорит, что это не клоакинг, а «оптимизация для роботов», и что так делают все? Как понять, кто прав?

Анатолий Кузнецов автор

Проверка одна: покажите ему две копии страницы и спросите, готов ли он вывести этот текст на экран для посетителей. Если ответ «нет, он испортит дизайн» — перед вами именно то нарушение, о котором написано в правилах обеих поисковых систем. Аргумент «так делают все» не работает: ограничения накладывают на конкретный сайт, а не на отрасль. И попросите его сослаться на документацию, где такая практика описана как допустимая.

Наталья

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

Дмитрий

У меня обратная ситуация: запросил страницу с подменённой строкой агента — всё совпадает, никакой разницы. Значит, можно быть спокойным?

Анатолий Кузнецов автор

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

Алексей

Добавлю про логи: у меня именно там всё и вылезло. Один адрес отдавал два устойчивых размера ответа, разница около восьми килобайт. Пока не посмотрел распределение по байтам, ничего не замечал.

Ольга

Не согласна с тем, что отвечает сайт. Если код поставил подрядчик без моего ведома, это его ответственность, а не моя. Странно, что поисковая система этого не учитывает.

Анатолий Кузнецов автор

Здесь надо разделить две вещи. Ответственность перед подрядчиком — ваш спор по договору, и он вполне реален: глава 39 Гражданского кодекса про возмездное оказание услуг, требования к качеству, возможные последствия за посторонний код лучше оценивать с юристом. А ограничения в выдаче накладываются на сайт, потому что поисковая система видит только сайт и не имеет способа проверить, кто именно правил файлы. Поэтому практический вывод для владельца остаётся тем же: доступы, снимок содержимого при передаче и периодическая сверка.

Павел

Про снимок при передаче доступов — золотая мысль. У нас за пять лет сменилось четыре подрядчика, и сейчас невозможно понять, кто что добавил и когда. Начну фиксировать состояние.

Елена

Сниппет действительно выдал проблему первым. В описании страницы в выдаче встречался текст про услуги в городах, где мы вообще не работаем. Я полгода думала, что это ошибка поиска.

Виктор

Стоит уточнить про предварительную отрисовку: у нас сайт на скриптах, и подрядчик отдаёт роботам заранее собранные страницы. После статьи проверил — содержание совпадает с браузерной версией, лишних блоков нет. Значит, всё в порядке.

Марина

Проверка контрольных сумм — недооценённая вещь. Прогнала ядро и плагины, нашла три изменённых файла в теме и один в плагине из каталога. Три оказались моими правками, а четвёртый нет.

Роман

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

Анатолий Кузнецов автор

Ценное дополнение: код в базе — самый неудобный случай, потому что сверка контрольных сумм файлов его не видит. Приём для поиска такой: выгрузить настройки с автозагрузкой и отсортировать по длине значения. Посторонние записи почти всегда выделяются длиной и тем, что значение не читается как текст.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх