Карта сайта в WordPress: почему sitemap плагина конфликтует с картой ядра

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

Карта сайта в WordPress устроена хитрее, чем кажется: на большинстве сайтов их две, и владелец об этом не знает. С версии 5.5 ядро отдаёт собственный файл по адресу /wp-sitemap.xml, а SEO-плагин параллельно генерирует свой — обычно /sitemap_index.xml или /sitemap.xml. Наборы адресов в них разные, правила формирования разные, даты обновления разные. Робот честно читает обе и получает два противоречащих описания одного сайта.

Ниже — как понять, сколько карт у вас на самом деле, какую оставить, что в неё включать и почему поле с датой изменения на WordPress почти всегда врёт. В SEO с 2005 года, и конфликт двух карт стабильно оказывается в списке находок на сайтах, где «индексация почему-то тормозит».

Откуда взялись две карты

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

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

  • Плагин ставили, потом отключили, потом поставили другой. Первый успел прописать настройки, второй их не увидел, встроенная карта вернулась в работу.
  • Карту делает не SEO-плагин, а отдельный. Специализированные генераторы карт часто не трогают встроенный механизм — просто потому, что не считают его своей зоной ответственности.
  • Карта генерируется в статический файл. Старый подход: плагин раз в сутки пишет физический sitemap.xml в корень. Встроенный генератор при этом продолжает отдавать свой адрес.
  • В robots.txt указана одна карта, а поисковику отправили другую. Формально это не две карты, а два источника — но робот всё равно читает оба.

Отдельная тонкость: встроенная карта живёт по адресу /wp-sitemap.xml, и если вы никогда его не открывали, вы её не видели. Отсутствие ссылки в robots.txt ничего не значит — робот находит этот адрес самостоятельно, потому что знает его для всех сайтов на WordPress.

Чем реально мешает конфликт

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

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

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

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

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

Как понять, сколько карт у вас

Проверка ручная, занимает пару минут: последовательно откройте несколько адресов и посмотрите, что отдаётся.

Адрес Кто обычно отдаёт Что это значит
/wp-sitemap.xml Встроенный генератор ядра Открывается — встроенная карта активна. Должна отдавать 404, если карту делает плагин
/sitemap_index.xml SEO-плагин с разбиением по типам Индексный файл со ссылками на вложенные карты — основной рабочий вариант
/sitemap.xml Плагин или физический файл в корне Проверьте по FTP: физический файл сильнее любого генератора и обновляется по своему расписанию
/robots.txt, строка Sitemap Плагин, тема или ручная правка Показывает, какую карту вы объявили роботу; сверьте с тем, что реально открывается
Вебмастер, раздел «Файлы Sitemap» То, что добавили вручную или нашёл робот Здесь видны все карты, о которых знает поисковик, включая забытые старые
Вложенные карты внутри индексного файла Генератор карты Сверьте список: лишние типы записей и таксономий видны сразу

Итог проверки — понимание, какая карта у вас основная. Дальше остаётся одна задача: оставить её единственной.

Как отключить лишнюю карту

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

Встроенная карта ядра отключается одной строкой в файле темы или в плагине для собственного кода:

add_filter('wp_sitemaps_enabled', '__return_false');

После этого адрес /wp-sitemap.xml начинает отдавать 404, что и требуется. Проверьте это в браузере сразу же: если карта продолжает открываться, значит, код не подключился — типичная причина в том, что его добавили в тему, которая не активна, или в дочернюю тему без нужного файла.

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

После отключения лишней карты обязательно уберите её из Вебмастера: раздел «Индексирование» — «Файлы Sitemap», удалите старые записи и оставьте одну актуальную. Иначе поисковик продолжит обращаться к несуществующему адресу и складывать ошибки в отчёт.

Что должно быть в карте, а чего быть не должно

Карта — это список страниц, которые вы хотите видеть в поиске. Не всех страниц сайта, а именно тех, которые должны ранжироваться. Правило одно и жёсткое: адрес в карте обязан отдавать 200 и быть открыт для индексации. Всё остальное — ошибка.

  • Включать: записи, страницы, карточки товаров и услуг, разделы каталога и рубрики, у которых есть собственное описание и спрос.
  • Не включать: страницы с метатегом noindex, адреса с перенаправлениями, страницы пагинации, служебные страницы вроде корзины и оформления заказа, архивы авторов при одном авторе, страницы вложений медиафайлов.
  • Отдельно про метки. Их включают, если под метку есть спрос и на странице есть текст. Автоматически созданные метки с одной записью в карте только мешают.
  • Изображения. Отдельная карта изображений имеет смысл для магазинов и сайтов, где поиск по картинкам даёт переходы. Для блога обычно достаточно того, что картинки видны на самих страницах.

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

Индексные и вложенные карты: когда дробить

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

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

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

HTML-карта — отдельная история, не имеющая отношения к XML. Она полезна как навигационный элемент и как способ дать ссылки на страницы, до которых иначе не добраться в два клика, но роботу она не заменяет XML-карту. Когда её стоит делать и как оформлять, разобрано в материале HTML карта сайта.

lastmod: почему на WordPress он врёт

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

Причины две, и обе технические.

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

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

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

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

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

Проверка и типовые ошибки

После наведения порядка карта добавляется в Яндекс Вебмастер и проверяется там же. Отчёт покажет число найденных адресов и ошибки формата. Дальше стоит сверить число адресов в карте с числом страниц в поиске: расхождение и есть предмет разбирательства.

Ошибка Как проявляется Что делать
Две карты с разными наборами адресов Число известных адресов больше числа реальных страниц; в поиске всплывают метки и архивы Отключить лишний генератор фильтром или настройкой плагина, удалить карту из Вебмастера
В карте адреса с редиректами Отчёт показывает исключённые страницы с причиной «перенаправление» Обновить карту после смены адресов; проверить, что генератор берёт текущие ссылки, а не сохранённые
В карте страницы с noindex Рост раздела «исключено» без видимой причины Согласовать настройки карты с настройками индексации по типам записей
Физический sitemap.xml в корне Карта не обновляется неделями, новых страниц в ней нет Удалить физический файл, если карту генерирует плагин или ядро
Адрес карты с http или со старым доменом Карта не читается, ошибка загрузки в отчёте Исправить адрес в robots.txt и в настройках плагина, заново добавить в Вебмастере
Карта закрыта в robots.txt Ошибка доступа при попытке чтения Открыть адрес; закрывать карту от обхода не нужно никогда

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

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

Нужна ли карта сайта вообще, если все страницы связаны ссылками?
Маленькому сайту она почти ничего не даёт: робот и так дойдёт до всех страниц за один обход. Польза растёт с объёмом и с глубиной вложенности, а также на сайтах, где часть страниц не связана ссылками с остальными. Общее описание механики — в материале карта сайта Sitemap.

Что делать со старым физическим sitemap.xml в корне?
Удалить, если карту генерирует плагин или ядро. Физический файл всегда сильнее, и вы будете отдавать роботу снимок сайта на дату его создания. Перед удалением сохраните копию, чтобы сверить наборы адресов.

Влияет ли порядок адресов в карте на что-нибудь?
Нет. Ни порядок, ни значение priority на ранжирование не влияют. Единственное, что имеет практический смысл, — честный lastmod и отсутствие мусора в списке.

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

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

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

Коротко

  • С версии 5.5 WordPress отдаёт собственную карту по адресу /wp-sitemap.xml; плагин генерирует свою, и часто работают обе одновременно.
  • Конфликт не штрафуется, но тратит обход, возвращает исключённые адреса и делает отчёты нечитаемыми.
  • Проверка ручная: откройте /wp-sitemap.xml, /sitemap_index.xml, /sitemap.xml, строку в robots.txt и список карт в Вебмастере.
  • Лишний генератор отключается фильтром wp_sitemaps_enabled или настройкой плагина, а старая карта удаляется из Вебмастера. Закрывать карту в robots.txt нельзя.
  • В карте только страницы, отдающие 200 и открытые для индексации; страниц с noindex, редиректов и пагинации там быть не должно.
  • Поле lastmod на WordPress врёт из-за массовых правок и подстановки текущего времени для таксономий; priority и changefreq можно не заполнять вовсе.

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

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

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

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

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

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

Комментарии

Капитолина Ершакова

Открыла /wp-sitemap.xml — работает, там метки и авторы, которых я год назад закрыла в плагине. В Вебмастере при этом добавлена только карта плагина. Робот же её не читает, раз я её не добавляла?

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

Читает. Адрес встроенной карты одинаков для всех сайтов на WordPress, и робот проверяет его самостоятельно, без вашего участия — добавление в Вебмастер только ускоряет процесс, но не является условием. Поэтому у вас сейчас ровно та ситуация, о которой речь: плагин исключил метки и авторов, а ядро исправно их перечисляет и приглашает робота зайти. Отключите встроенный генератор фильтром wp_sitemaps_enabled, проверьте, что адрес начал отдавать 404, и через неделю посмотрите отчёт «Страницы в поиске»: раздел с исключёнными по причине запрета индексации должен перестать расти. Уже попавшие туда адреса уйдут сами, просто не мгновенно.

Остап Юшманов

Добавил фильтр в functions.php дочерней темы, а карта ядра всё равно открывается. Код скопировал точно, опечаток нет.

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

Проверьте три вещи по порядку. Первое: активна ли именно дочерняя тема — в списке тем она должна быть отмечена как текущая, иначе её файлы не подключаются вообще. Второе: не кэшируется ли ответ. Карты часто попадают в полностраничный кэш плагина или в кэш на стороне сервера, и вы видите сохранённую копию; сбросьте кэш и откройте адрес с добавленным случайным параметром. Третье: не создан ли физический файл. Если в корне лежит настоящий wp-sitemap.xml, никакие фильтры на него не действуют — веб-сервер отдаёт файл, не запуская PHP. Обычно причина во втором или третьем пункте; первый отсекается за пять секунд.

Гавриил Плотвин

Про lastmod прямо в точку. Прогнал массовую замену по базе, обновились даты у 900 статей. Через неделю робот перестал реагировать на реальные обновления вообще.

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

Именно так это и работает: разовый всплеск «обновилось всё» обесценивает поле на некоторое время. Хорошая новость в том, что состояние обратимое — робот перестраивает свою модель обхода по факту, а не по вашим датам, и через несколько циклов возвращается к нормальному поведению. Чтобы ускорить, отправляйте действительно обновлённые страницы на переобход руками и не запускайте новых массовых операций хотя бы месяц. На будущее: при правках через SQL меняйте post_modified только у тех записей, которые реально изменились, а не у всей выборки — обычно это одна дополнительная строка в условии запроса, а разница в поведении робота заметная.

Аристарх Скорняков

У меня магазин, 40 тысяч товаров. Плагин отдаёт одну карту на все. Что даст разбиение, кроме удобства?

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

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

Мефодий Голомазов

Закрыл карту в robots.txt, чтобы робот не тратил на неё время. Теперь в Вебмастере ошибка доступа. Это критично?

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

Критично в том смысле, что вы отключили инструмент, который должен был вам помогать. Карта не тратит обход в сколько-нибудь заметном объёме: это один файл, который читается быстро и сообщает роботу сразу весь список адресов. Закрыв её, вы оставили роботу единственный способ находить страницы — переходы по внутренним ссылкам, и новые материалы теперь обнаруживаются медленнее. Уберите строку из robots.txt, откройте адрес, убедитесь, что он отдаёт 200 и корректный XML, и заново запустите проверку в Вебмастере. Ошибка из отчёта уйдёт после следующего успешного чтения, отдельно ничего сбрасывать не нужно.

Евдоксия Ремезова

Нашла у себя в корне sitemap.xml от 2021 года. Плагин всё это время генерировал свою карту, а робот читал файл трёхлетней давности. Спасибо за подсказку с проверкой по FTP.

Клим Фалилеев

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

Харитина Фетисова

А что делать со страницами вложений? У меня их две тысячи, все в карте, все почти пустые.

Нестор Чиркунов

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

Домна Цимбалова

Вопрос по priority: если поисковики его не используют, почему плагины продолжают его писать?

Порфирий Ломтев

По инерции и ради совместимости со спецификацией. Поле в стандарте есть, значит генератор его заполняет. Вреда от него нет, пользы тоже.

Ясмина Чубарова

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

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