
Подмена контента для робота выглядит на сайте невинно: в браузере страница чистая и человеческая, а на запрос от имени поискового робота тот же адрес отдаёт дополнительно три тысячи знаков с ключами и десяток ссылок на чужие сайты. Владелец об этом не знает, потому что смотрит на свой сайт глазами человека. Санкции при этом получает сайт, а не тот, кто это устроил.
Ниже — что относится к подмене, а что к нормальной адаптации, как это записано в правилах поисковых систем, какими способами различают запрос, где в 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-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →
Комментарии
Игорь
Проверил свой сайт двумя запросами, как описано. Разница в объёме почти вдвое, в версии для робота внизу блок текста с перечислением городов и четыре ссылки на незнакомые домены. Подрядчик ушёл больше года назад. Что делать в первую очередь?
Анатолий Кузнецов автор
Сначала сохраните оба ответа в файлы и выдержку из журнала сервера — это ваши доказательства, а после удаления кода их уже не собрать. Потом смените все доступы, включая администраторов внутри сайта, и посмотрите каталог обязательных плагинов: при описанной картине с четырьмя чужими ссылками код обычно лежит именно там или в файле функций темы. После удаления перепроверьте тем же способом и обязательно на нескольких типах страниц, не только на главной.
Светлана
Способ с выделением всей страницы и копированием в редактор оказался самым простым. Нашла у себя абзац с ключами, выведенный шрифтом в один пиксель под подвалом. Визуально его нет вообще.
Максим
А если подрядчик говорит, что это не клоакинг, а «оптимизация для роботов», и что так делают все? Как понять, кто прав?
Анатолий Кузнецов автор
Проверка одна: покажите ему две копии страницы и спросите, готов ли он вывести этот текст на экран для посетителей. Если ответ «нет, он испортит дизайн» — перед вами именно то нарушение, о котором написано в правилах обеих поисковых систем. Аргумент «так делают все» не работает: ограничения накладывают на конкретный сайт, а не на отрасль. И попросите его сослаться на документацию, где такая практика описана как допустимая.
Наталья
Таблица с местами в WordPress закрыла вопрос. Я перебирала плагины в списке и ничего не находила, а каталог обязательных плагинов даже не знала, что существует. Там и лежал файл.
Дмитрий
У меня обратная ситуация: запросил страницу с подменённой строкой агента — всё совпадает, никакой разницы. Значит, можно быть спокойным?
Анатолий Кузнецов автор
Один механизм вы исключили, остальные нет. Если различие настроено по сетевому адресу, ваш запрос с подделанной строкой выглядит как обычный посетитель и подмена не сработает. Прогоните ту же страницу через проверку ответа сервера в панели вебмастера — там запрос идёт с настоящих адресов робота. И отдельно проверьте переход на сайт из результатов поиска в чистом профиле браузера: обманный редирект часто настроен именно по рефереру.
Алексей
Добавлю про логи: у меня именно там всё и вылезло. Один адрес отдавал два устойчивых размера ответа, разница около восьми килобайт. Пока не посмотрел распределение по байтам, ничего не замечал.
Ольга
Не согласна с тем, что отвечает сайт. Если код поставил подрядчик без моего ведома, это его ответственность, а не моя. Странно, что поисковая система этого не учитывает.
Анатолий Кузнецов автор
Здесь надо разделить две вещи. Ответственность перед подрядчиком — ваш спор по договору, и он вполне реален: глава 39 Гражданского кодекса про возмездное оказание услуг, требования к качеству, возможные последствия за посторонний код лучше оценивать с юристом. А ограничения в выдаче накладываются на сайт, потому что поисковая система видит только сайт и не имеет способа проверить, кто именно правил файлы. Поэтому практический вывод для владельца остаётся тем же: доступы, снимок содержимого при передаче и периодическая сверка.
Павел
Про снимок при передаче доступов — золотая мысль. У нас за пять лет сменилось четыре подрядчика, и сейчас невозможно понять, кто что добавил и когда. Начну фиксировать состояние.
Елена
Сниппет действительно выдал проблему первым. В описании страницы в выдаче встречался текст про услуги в городах, где мы вообще не работаем. Я полгода думала, что это ошибка поиска.
Виктор
Стоит уточнить про предварительную отрисовку: у нас сайт на скриптах, и подрядчик отдаёт роботам заранее собранные страницы. После статьи проверил — содержание совпадает с браузерной версией, лишних блоков нет. Значит, всё в порядке.
Марина
Проверка контрольных сумм — недооценённая вещь. Прогнала ядро и плагины, нашла три изменённых файла в теме и один в плагине из каталога. Три оказались моими правками, а четвёртый нет.
Роман
Добавлю к списку мест: у меня посторонний код сидел в опции базы, которую создал плагин кэширования, и подставлялся в подвал на этапе сборки страницы. В файлах темы было чисто, поэтому искал долго.
Анатолий Кузнецов автор
Ценное дополнение: код в базе — самый неудобный случай, потому что сверка контрольных сумм файлов его не видит. Приём для поиска такой: выгрузить настройки с автозагрузкой и отсортировать по длине значения. Посторонние записи почти всегда выделяются длиной и тем, что значение не читается как текст.