«Сайт нормальный, а позиций нет» — с этого начинается половина разговоров. Дальше обычно ждут, что проблема в ссылках или в текстах. В большинстве случаев до текстов дело не доходит: сайт либо показывает поиску не то, что нужно, либо показывает это в десяти копиях, либо не показывает вовсе.
Собрал ошибки, которые встречаются чаще всего, в порядке от самых вредных. Почти все проверяются за один вечер и правятся без переделки сайта.
Дубли: один документ по нескольким адресам
Самая массовая проблема и самая недооценённая. Одна и та же страница доступна сразу в нескольких видах:
- со слэшем на конце и без него
- по http и по https
- с www и без www
- как /catalog/ и как /catalog/index.php
- в разном регистре — на nginx адреса регистрозависимы
- с десятками вариантов параметров: сортировка, вид отображения, метки
Поиск не наказывает за дубли специально — он просто выбирает один адрес канонической версией, и не всегда тот, который вы продвигаете. Половина сигналов остаётся на «неправильном» URL.
Что делать: выбрать одну форму адреса и жёстко нормализовать остальные 301-м редиректом на уровне приложения или nginx, без цепочек. Проверка — curl -sI по каждому варианту: ожидаем ровно один ответ 200 и по одному 301 на каждый остальной вид адреса.
Отдельно посмотрите в Вебмастере: Индексирование → Страницы в поиске → «Исключённые» с причиной «Дубль». Это готовый список того, что поиск уже нашёл и склеил по своему усмотрению.
Параметры фильтров и сортировок без правил
В каталоге с фасетным фильтром число комбинаций параметров исчисляется тысячами. Если ничего не настроено, робот обходит их все, тратит краулинговый бюджет на бесконечные сочетания цвета, размера и сортировки и добирается до реальных категорий в последнюю очередь.
- На страницах с параметрами, не меняющими содержимое (сортировка, вид отображения, utm), — rel=canonical на чистый адрес категории
- Clean-param в robots.txt для служебных параметров: sort, order, view, utm_source, utm_medium, utm_campaign, yclid
- Закрывать фильтры правилом Disallow: /*? целиком — плохая идея: под тот же шаблон попадают полезные параметры и, на некоторых CMS, AJAX-эндпоинты
- Если по фильтру есть спрос как по отдельному запросу — такой фильтр выносят в статический адрес с собственными title, H1 и текстом
Последний пункт — это уже не техничка, а работа над структурой: раскладка кластеров по посадочным страницам внутри SEO для интернет-магазина.
Пагинация с одинаковыми метатегами
Страницы с номерами 2, 3 и далее с тем же title и тем же описанием категории — это дубли в чистом виде. Совет «ставить canonical со второй страницы на первую» устарел и работает против вас: товары со второй страницы тогда для поиска не существуют.
Как правильно: на каждой странице пагинации — самоканоникал, в title и H1 приписка вида «страница 2», SEO-текст категории выводится только на первой странице.
Мягкие 404 и неправильные коды ответа
- Несуществующий адрес отдаёт 200 с текстом «страница не найдена» — поиск индексирует такие страницы как обычные и наполняет индекс мусором
- Страница 404 отдаёт 302 на главную — хуже предыдущего: главная начинает склеиваться со всем, чего нет на сайте
- Товар, снятый с продажи, отдаёт 404 — если у него были позиции и ссылки, это выброшенный трафик
- Внутренняя ошибка отдаёт 200 вместо 500, и битая страница остаётся в индексе
По снятым товарам правило такое: оставить 200, показать «нет в наличии» и предложить аналоги; удалять — только если товара не будет никогда, и тогда ставить 301 на категорию. Проверяется всё одной строкой: curl -sI https://site.ru/adresa-kotorogo-net/ должен дать 404, а главная — 200.
sitemap.xml, который никто не поддерживает
Карта сайта с адресами, отдающими 301 и 404, — сигнал, что источник данных о сайте ненадёжен. Требования простые: только адреса с кодом 200, только каноническая форма, lastmod — настоящая дата изменения документа, а не дата генерации файла. Если lastmod у всех страниц совпадает и обновляется каждую ночь, поиск перестаёт на него смотреть. Ссылка на карту — в robots.txt отдельной строкой Sitemap, и карта добавлена в Вебмастер.
robots.txt, закрывающий лишнее
Два типовых случая. Первый — закрыты CSS и JS: робот рендерит страницу, и без стилей и скриптов он видит другой документ, а мобильная версия выглядит сломанной. Нужно явно разрешить обход статики. Второй — забытый Disallow со стейджинга, тот самый файл, который уезжает в продакшен вместе с релизом.
Зеркальная ошибка — открытый мусор: внутренний поиск, корзина, личный кабинет, сравнение, версии для печати. Их закрывают и директивой Disallow, и метатегом noindex.
Забытый noindex в шаблоне
Отдельным пунктом, потому что цена ошибки максимальная, а найти её глазами сложно: метатег robots со значением noindex или заголовок X-Robots-Tag, оставшийся на разделе после тестов. Сайт выглядит рабочим, страницы открываются, а из индекса медленно исчезают.
Проверяется двумя командами: поиском по исходному коду страницы на name="robots" и просмотром заголовков ответа. Такой пункт должен стоять в чек-листе после каждого релиза — в регламенте поддержки сайта он обязателен.
Редиректные цепочки и битые внутренние ссылки
Ссылка в меню ведёт на адрес без слэша, оттуда 301 на адрес со слэшем, оттуда ещё один 301 на новый адрес. Каждый шаг — потеря. Внутренние ссылки должны вести сразу на конечный адрес в канонической форме: цепочки существуют для внешних ссылок и старых адресов, но не внутри сайта. Краул покажет и цепочки, и внутренние 404. Норма — ноль битых внутренних ссылок.
Медленный ответ сервера
TTFB — не «фактор ранжирования» в лоб, но он определяет, сколько страниц робот успеет обойти за визит. Для сайта на пятьсот страниц с ответом сервера в полторы секунды полный обход занимает недели. Плюс поведенческие: с медленной страницы возвращаются в выдачу, и это поиск видит.
Ориентиры, на которые смотрим: TTFB до 200 мс с сервера, LCP до 2,5 с на мобильном подключении, ноль запросов к базе в цикле вывода каталога. Если цифры далеко — это отдельная работа по ускорению сайта, и делать её надо до того, как вкладываться в контент и ссылки.
Разметка с ошибками
Микроразметка не поднимает позиции сама, но даёт расширенный сниппет — цену, рейтинг, хлебные крошки, вопросы. Типовые поломки: Offer без цены или с ценой в виде строки «от 10 000» вместо числа, FAQPage с вопросами, которых нет в видимом тексте страницы, BreadcrumbList с неправильным порядком элементов. Всё это валидаторы Яндекса и Google показывают за минуту.
В каком порядке чинить
- Коды ответа и noindex — риск потерять индекс целиком
- Нормализация адресов и дубли — половина сигналов сейчас уходит не туда
- robots.txt и sitemap — от них зависит, что вообще увидят
- Параметры и пагинация — краулинговый бюджет
- Скорость
- Разметка
Первые три пункта — это обычно один-два дня работы на существующем сайте, без переделки. И пока они не закрыты, обсуждать тексты и ссылки смысла нет: поиск ранжирует то, что смог обойти и правильно понять.
Полный список по конкретному сайту получается за один прогон — это и есть содержание технического SEO-аудита: краул, выгрузка индекса из Вебмастера, проверка кодов ответа, разметки и скорости, на выходе — таблица задач с приоритетами. Если после исправлений нужен не разовый разбор, а планомерная работа над структурой и позициями, это уже SEO-продвижение.