Проверка карты сайта: ошибки sitemap, из-за которых страницы не попадают в индекс

Проверка карты сайта: ошибки sitemap, из-за которых страницы не попадают в индекс
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

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

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

Что проверять в карте сайта, кроме факта её существования

Ошибки карты делятся на четыре группы, и лечатся они по-разному.

Доставка. Робот не может получить файл: карта отдаёт 404, 403, 500, редирект, ответ приходит дольше таймаута, файл закрыт в robots.txt. Пока не решена эта группа, остальные проверять бессмысленно.

Разбор. Файл получен, но не читается как XML: BOM в начале, лишний перевод строки перед объявлением XML, неэкранированный амперсанд, отсутствующее пространство имён, обрезанный конец файла из-за таймаута генерации.

Содержимое. Файл прочитан, но внутри лежат адреса, которых там быть не должно: закрытые от индексации, отдающие 404, ведущие через редирект, неканонические, с другим протоколом или доменом.

Достоверность. Формально всё корректно, но даты не отражают реальность, и робот перестаёт использовать их как подсказку.

Начинать нужно с самого грубого: открыть карту не в браузере, а запросом, который показывает заголовки ответа, — curl -I https://site.ru/sitemap.xml. Код ответа должен быть 200, тип содержимого — application/xml или text/xml. Тип text/html — уже диагноз: под адресом карты отдаётся страница темы. На WordPress так бывает, когда генерировавший карту плагин отключили, правило перезаписи осталось, и запрос улетает в шаблон 404, который при кривой настройке возвращает код 200. Браузер такую страницу отрисует, а робот получит мусор.

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

Закрытые от индексации адреса внутри карты

Самая частая находка. Карта говорит роботу «эти страницы важны, обойди их», а сама страница отвечает «меня индексировать нельзя». Запрет приходит из четырёх мест, и проверять надо все четыре.

Метатег robots. В <head> стоит <meta name="robots" content="noindex, follow">. Ставит его SEO-плагин по типу записи: страницы вложений, архивы по датам и авторам, теги без описания, страницы поиска.

HTTP-заголовок X-Robots-Tag. Тот же запрет, но в заголовке ответа. В исходном коде страницы его не видно, поэтому регулярно пропускают. Ищется тем же curl -I или в Вебмастере через «Проверку ответа сервера».

Disallow в robots.txt. Адрес перечислен в карте и одновременно запрещён к обходу; Яндекс помечает такие строки предупреждением. Классика на магазинах: в карту попадают /cart/, /checkout/, /my-account/, а robots их закрывает.

Canonical на другой адрес. Страница не запрещена, но сама указывает, что главная версия — другая. Робот пройдёт по такому адресу, прочитает canonical и уйдёт индексировать другой документ. Отдельная беда — пагинация: адреса вида /blog/page/2/ с каноникалом на первую страницу в карте не нужны. Про логику склейки есть отдельный материал — Rel=canonical — канонические ссылки.

На сайте в тысячу страниц проверять всё это по одному адресу бессмысленно. Рабочий способ: выгрузить адреса из карты в текстовый файл и прогнать краулером в режиме списка — Screaming Frog SEO Spider, Netpeak Spider, SiteAnalyzer. Смотреть нужно четыре колонки: код ответа, значение метатега robots, канонический адрес и признак индексируемости. Всё, что не 200 и не «индексируется», — кандидат на удаление из карты.

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

Старые, удалённые и переехавшие страницы в карте

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

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

Черновики и запланированные записи. Некоторые генераторы берут записи по типу, не проверяя статус публикации: в карту попадают draft, pending и записи с будущей датой. Робот получает 404 или страницу входа.

Разнобой в написании адреса. Адрес в карте должен посимвольно совпадать с каноническим: тот же протокол, то же наличие www, тот же регистр, тот же слэш на конце. http://site.ru/uslugi и https://site.ru/uslugi/ — для робота два разных документа, и один из них отдаёт редирект. Кириллица в пути должна быть в percent-encoding, домен — в punycode: карту с сырой кириллицей часть роботов разберёт, часть — нет.

Дата изменения: почему lastmod на WordPress врёт

Тег <lastmod> — подсказка роботу: «документ изменился тогда-то, имеет смысл перечитать». Поисковик не обязан ей верить и решает по одному критерию — насколько дата совпадала с реальностью в прошлые разы. Совпадала — дата экономит обход и ускоряет переиндексацию, врала — её перестают учитывать. На WordPress она врёт по нескольким причинам сразу.

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

Вторая — SQL-правки и автоматические обработки. Замена ссылок по всему блогу, пересборка перелинковки, обновление плагина, прогоняющего записи через свою нормализацию, — всё это трогает post_modified. Наутро вы получаете карту, где две тысячи статей «изменены» вчера в 03:14. Робот приходит, сравнивает содержимое с прошлым слепком, отличий не находит — и в следующий раз дате не верит.

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

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

Вывод простой: косметические правки не должны трогать дату, осмысленные — должны, иначе робот не узнает об изменении и придёт через месяц. И не рассчитывайте на changefreq с priority: Яндекс их не использует, Google открыто заявил, что игнорирует.

Размер, лимиты и вложенные карты

Ограничения протокола sitemaps.org: не больше 50 000 адресов и не больше 50 МБ в несжатом виде на один файл. Превышение — файл разбирается частично либо отбрасывается вовсе. Сжатие gzip разрешено, но лимит в 50 МБ считается по распакованному содержимому.

Когда адресов больше, делается индексная карта: файл с корневым элементом <sitemapindex>, внутри которого перечислены обычные карты. Ограничение одно, и его регулярно нарушают: вложенность допускается ровно на один уровень, индексная карта не может ссылаться на другую индексную. Некоторые SEO-плагины при определённых настройках делают именно это. Часть роботов вторую ступень не разворачивает, и половина сайта остаётся неизвестной.

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

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

Ссылка на карту в robots.txt и другие способы передать её роботу

Директива Sitemap — межсекционная: действует независимо от блоков User-agent, ставится в конце файла отдельной строкой и записывается только абсолютным адресом. Ошибки в этой одной строке повторяются из проекта в проект:

  • относительный путь Sitemap: /sitemap.xml вместо полного адреса — директива игнорируется;
  • http:// при том, что сайт давно на HTTPS: робот получает редирект там, где ждёт файл;
  • адрес старого домена после переезда;
  • две-три карты от разных плагинов, часть из которых давно мертва;
  • сама карта закрыта правилом вроде Disallow: /*.xml$;
  • директива написана внутри блока для конкретного бота и теряется при правках.

Одной строки мало. Карту нужно добавить руками в Яндекс.Вебмастере («Индексирование → Файлы Sitemap») и в Google Search Console. Только там видно, что именно робот прочитал: сколько адресов принял, сколько отбросил, когда обходил. Про остальные конфликты этих двух файлов есть отдельный разбор — Ошибки robots.txt и sitemap.xml: как из-за одной строчки закрыть сайт от Яндекса. Протокол IndexNow карту не заменяет: он сообщает об изменении конкретного адреса здесь и сейчас, а карта описывает состав сайта целиком.

Формат и мелочи, из-за которых карта не разбирается

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

Ошибка Как проявляется Как найти и исправить
BOM в начале файла «Ошибка разбора», первый тег не распознаётся Открыть файл в редакторе с выбором кодировки, пересохранить как UTF-8 без BOM; на PHP-генераторе — убрать пустые строки после закрывающего тега в подключаемых файлах
Неэкранированный амперсанд в адресе Разбор обрывается на первом же таком адресе Заменить & на &amp;; лучше — убрать из карты адреса с GET-параметрами вовсе
Нет объявления пространства имён Файл читается как обычный XML, теги не распознаются В корневом теге должен быть xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
Отдаётся с типом text/html Формально 200, но робот получает страницу темы Проверить curl -I, пересохранить постоянные ссылки, отключить конфликтующие правила перезаписи

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

Что смотреть в Вебмастере после правок и когда карта не поможет

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

Где смотреть Что именно Тревожный признак
Индексирование → Файлы Sitemap Статус, дата последнего обхода, число найденных адресов, ошибки и предупреждения Статус «не удалось загрузить», дата обхода старше месяца, адресов заметно меньше реального
Индексирование → Страницы в поиске Соотношение «в поиске» и «исключено», а главное — причины исключения Массовые причины «недостаточно качественная», «неканоническая», «ошибка HTTP» после правок карты
Индексирование → Статистика обхода Распределение кодов ответа по дням, доля 404 и 3xx Всплеск 404 сразу после загрузки новой карты — значит, в неё попали мёртвые адреса
Инструменты → Проверка ответа сервера Код, заголовки, метатег robots и canonical выборочных адресов из карты Расхождение между тем, что видите вы, и тем, что получает робот

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

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

Карта не заменяет внутренние ссылки: документ, на который не ведёт ни одна ссылка с сайта, робот считает второстепенным, и вес по такому адресу не передаётся. Она не лечит дубли, не участвует в ранжировании и не отменяет 301-редиректы — при смене структуры адресов редиректы обязаны стоять, а в карте должны быть только новые адреса.

Частые вопросы

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

Сколько карт можно указать в robots.txt? Формально сколько угодно, каждую отдельной строкой. Практически — одну индексную, ссылающуюся на остальные. Несколько независимых директив почти всегда означают, что старые карты не удалили после смены плагина.

Что делать со страницами, которые есть в карте, но неделями не индексируются? Сначала исключить техническую причину: код ответа, метатег robots, canonical, доступность для робота. Если технически чисто — дело в содержании или в отсутствии внутренних ссылок на страницу. Карта здесь уже не инструмент.

Коротко

  • Наличие файла ничего не доказывает: проверяйте карту по четырём группам — доставка, разбор, содержимое, достоверность дат.
  • Главная ошибка — закрытые от индексации адреса внутри карты; запрет приходит из метатега robots, заголовка X-Robots-Tag, robots.txt и canonical.
  • В карте не должно быть 404, редиректов, черновиков и адресов с другим протоколом или написанием — массово это ловится краулером в режиме списка.
  • На WordPress lastmod врёт из-за поля post_modified: любое пересохранение делает страницу «свежей», а сломанной дате робот перестаёт верить.
  • Лимиты — 50 000 адресов и 50 МБ, индексная карта допускает только один уровень вложенности, медленная генерация приводит к обрыву загрузки.
  • В robots.txt — абсолютный адрес актуальной карты плюс добавление вручную в Вебмастер и Search Console; выводы после правок делать через месяц, а не через сутки.

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

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

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

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

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

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

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

Комментарии

Влада Мезенцова

В Вебмастере по карте написано «Файл проверен, обнаружены ошибки», а список ошибок пустой. Куда смотреть?

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

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

Спиридон Быстряков

У меня в карте 4300 адресов, а в поиске 1900. Это плохо?

Радим Голощапов

Плагин ставит lastmod на все страницы одинаковый — дату генерации файла. Стоит ли из-за этого менять плагин?

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

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

Марьяна Чибисова

Читала, что priority помогает продвигать важные страницы. У меня главная 1.0, разделы 0.8. Есть эффект?

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

Эффекта нет, и это не мнение, а позиция самих поисковиков. Google публично говорил, что игнорирует priority и changefreq, Яндекс их тоже не использует при планировании обхода. Теги остались в протоколе с середины двухтысячных, когда предполагалось, что вебмастер честно расставит приоритеты, — на практике почти все ставят единицу везде, и значение обесценилось. Приоритет для робота задаётся другими вещами: сколько внутренних ссылок ведёт на страницу, на каком расстоянии в кликах она от главной, как часто её содержимое действительно меняется. Хотите поднять важность раздела — дайте на него ссылки из меню, из сквозных блоков и из статей, а не цифру в XML.

Тимофей Лаптухин

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

Инга Хлыстова

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

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

Делайте индексную карту и под ней отдельные файлы по типам сущностей: товары, категории, бренды, статические страницы, блог. Товары при таком объёме разбивайте дополнительно — по 10–20 тысяч в файл, а не под самый лимит в 50 тысяч: маленькие файлы быстрее генерируются и не упираются в таймаут. Нумеруйте их предсказуемо, чтобы состав файла не менялся при каждой пересборке, иначе робот каждый раз будет видеть новый набор. Отдельно проследите, чтобы товары не в наличии и снятые с продажи выпадали из карты сразу, а не через месяц. И обязательно переведите генерацию в статические файлы по расписанию — динамическая сборка на таком каталоге почти гарантированно оборвётся по таймауту, и Вебмастер напишет «не удалось загрузить» при том, что вручную вы файл откроете нормально.

Прохор Ярыгин

После переезда на HTTPS в карте остались http-адреса. Все редиректятся, сайт работает. Успею поправить через пару месяцев?

Злата Свиридина

Прогнала карту краулером — 140 адресов с canonical на другую страницу. Это всё пагинация и метки. Удалять из карты или чинить canonical?

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

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

Ефим Трубачёв

Правильно ли я понимаю, что если добавить страницу в карту и нажать переобход, она гарантированно попадёт в индекс?

Дарина Кожемякина

В robots.txt указаны две карты от старого и нового плагина. Старая отдаёт 404. Может из-за неё Вебмастер ругаться на новую?

Артемий Немилов

Сравнил дату в карте и дату обновления на самой странице — расходятся на несколько месяцев. Насколько это критично?

Клавдия Кувалдина

Убрала из карты 800 лишних адресов. Через сколько ждать изменений в отчёте по страницам в поиске?

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