Перейти к содержимому

Карта сайта неполная - разбор причин

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

С чего начать

Смотрим дату файла и число адресов внутри:

Окно терминала
ls -l --time-style=long-iso $DOCROOT/sitemap*.xml # дата = момент последней генерации
grep -c '<loc>' $DOCROOT/sitemap.xml # в индексном файле - ссылки на части
grep -c '<url>' $DOCROOT/sitemap_iblock_12.xml # в части - адреса одного инфоблока

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

Считаем, сколько адресов ожидается:

\Bitrix\Main\Loader::includeModule('iblock');
echo \Bitrix\Iblock\ElementTable::getCount(['=IBLOCK_ID' => 12, '=ACTIVE' => 'Y']);
echo \Bitrix\Iblock\SectionTable::getCount(['=IBLOCK_ID' => 12, '=ACTIVE' => 'Y']);
// ORM видит только базовые поля, но для сверки количества этого достаточно

Разница между ожидаемым числом и фактическим называет выпавший уровень. Нет адресов разделов - в наборе не отмечены секции, нет карточек товаров - элементы.

Проверяем, что отдаёт сам адрес сайта:

Окно терминала
curl -s https://example.org/sitemap.xml | head -5
curl -sI https://example.org/sitemap.xml | grep -i 'last-modified\|content-type'
# адреса внутри обязаны начинаться с домена главного зеркала, а не с косой черты

Файл на диске и файл по адресу совпадают не всегда, и это отдельная причина. Старая статичная копия в корне или правило веб-сервера отдают поисковику не то, что собрал модуль поисковой оптимизации.

Проверяем ответом сайта первые адреса карты:

Окно терминала
grep -o '<loc>[^<]*' $DOCROOT/sitemap_iblock_12.xml | head -3 | cut -c6-
curl -o /dev/null -s -w '%{http_code}\n' 'https://example.org/catalog/telefony/tovar/'
# ответ 404 на адресе из карты - шаблоны инфоблока разошлись с реальными ссылками

Карта собирает адреса по шаблонам из настроек инфоблока, а не по правилам обработки адресов. Расхождение этих двух источников даёт файл, полный по числу строк и бесполезный по содержанию.

Сверяем ссылку на карту и главное зеркало:

Окно терминала
grep -iE 'host|sitemap' $DOCROOT/robots.txt # директива Host и адрес карты сайта
curl -s https://example.org/robots.txt | grep -i sitemap # что видит поисковый робот
# зеркало задают до генерации набора правил, иначе набор соберётся неверно

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

Смотрим, идут ли агенты по расписанию:

// N - агенты сняты с хитов, и запускать их обязан планировщик системы
echo \Bitrix\Main\Config\Option::get('main', 'check_agents');

Пересборку карты выполняет агент, а агент на малопосещаемом сайте ждёт хита неделями. При значении N вызов CAgent::CheckAgents() приходит из скрипта cron_events.php, и без задания в планировщике карта не обновится никогда.

Причины

  1. В настройках набора включены не все уровни инфоблока примерно 30% случаев

    ПризнакВ карте есть адреса разделов, а карточек товаров нет, либо ровно наоборот.

    ПроверкаОткрываем настройку sitemap.xml в разделе поисковой оптимизации и смотрим вкладку инфоблоков.

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

  2. Настройки сохранили, но генерацию не запускали примерно 22% случаев

    ПризнакФайл карты не появился вовсе либо хранит состав недельной давности после правок.

    ПроверкаСверяем дату файла на диске с датой последнего сохранения настроек набора.

    Что делатьЖмём «Сохранить и запустить» или «Запустить»: одно «Сохранить» файл карты не пересобирает.

  3. Агент генерации не выполняется примерно 18% случаев

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

    ПроверкаСмотрим настройку check_agents главного модуля и задание cron_events в расписании системы.

    Что делатьПереводим агенты на планировщик системы либо запускаем генерацию руками после загрузки товаров.

  4. В файле чужие адреса: домен, зеркало, шаблоны инфоблока примерно 12% случаев

    ПризнакСсылки идут без домена, с лишним www или ведут на несуществующие разделы каталога.

    ПроверкаСверяем доменное имя сайта, главное зеркало в robots.txt и шаблоны адресов инфоблока.

    Что делатьПриводим домен и шаблоны к боевым адресам, а затем пересобираем карту заново.

  5. Элементы отсеиваются активностью или правами примерно 10% случаев

    ПризнакВ карте нет части товаров, и эти же товары не открываются гостю сайта.

    ПроверкаСчитаем активные элементы запросом и открываем пропавший адрес в анонимном окне браузера.

    Что делатьВозвращаем активность и даты показа, а закрытые от гостей разделы в карте не ждём.

  6. Файл перекрыт правилом веб-сервера примерно 8% случаев

    ПризнакНа диске карта свежая и полная, а по адресу сайта отдаётся старая.

    ПроверкаСравниваем содержимое файла в корне с тем, что вернул запрос к адресу.

    Что делатьУбираем статичную копию и правило сервера, которое отдаёт файл мимо карты модуля.

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

Нажал «Сохранить», а файл карты не появился - почему?

Кнопки ведут себя по-разному: «Сохранить» только запоминает настройку, «Сохранить и запустить» ещё и собирает файл, «Запустить» собирает по ранее сохранённой настройке. Для первого файла нужна одна из двух последних.

В карте только разделы, товаров нет - что не так?

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

Почему в карте нет страниц своего компонента на highload-блоке?

Штатная генерация обходит файлы, инфоблоки и форумы, а о highload-блоке ничего не знает. Такие адреса добавляют своим файлом карты и ссылкой на него в robots.txt.

Карта не обновлялась месяц, посещаемость низкая - что делать?

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

На поддомене города отдаётся карта основного сайта - это сбой?

Нет, если поддомен не заведён отдельным сайтом: своего набора у него тогда нет. Либо заводят второй сайт со своей картой, либо отдают нужный файл правилом веб-сервера.

Смежное

Первоисточник