Карта сайта неполная - разбор причин
В 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 -5curl -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, и без задания в планировщике карта не обновится никогда.
Причины
-
В настройках набора включены не все уровни инфоблока примерно 30% случаев
ПризнакВ карте есть адреса разделов, а карточек товаров нет, либо ровно наоборот.
ПроверкаОткрываем настройку sitemap.xml в разделе поисковой оптимизации и смотрим вкладку инфоблоков.
Что делатьОтмечаем нужные уровни осознанно: автогенерация, список, секции и элементы задают состав файла.
-
Настройки сохранили, но генерацию не запускали примерно 22% случаев
ПризнакФайл карты не появился вовсе либо хранит состав недельной давности после правок.
ПроверкаСверяем дату файла на диске с датой последнего сохранения настроек набора.
Что делатьЖмём «Сохранить и запустить» или «Запустить»: одно «Сохранить» файл карты не пересобирает.
-
Агент генерации не выполняется примерно 18% случаев
ПризнакКарта не менялась неделями, посещаемость низкая, а ручной запуск при этом отрабатывает.
ПроверкаСмотрим настройку check_agents главного модуля и задание cron_events в расписании системы.
Что делатьПереводим агенты на планировщик системы либо запускаем генерацию руками после загрузки товаров.
-
В файле чужие адреса: домен, зеркало, шаблоны инфоблока примерно 12% случаев
ПризнакСсылки идут без домена, с лишним www или ведут на несуществующие разделы каталога.
ПроверкаСверяем доменное имя сайта, главное зеркало в robots.txt и шаблоны адресов инфоблока.
Что делатьПриводим домен и шаблоны к боевым адресам, а затем пересобираем карту заново.
-
Элементы отсеиваются активностью или правами примерно 10% случаев
ПризнакВ карте нет части товаров, и эти же товары не открываются гостю сайта.
ПроверкаСчитаем активные элементы запросом и открываем пропавший адрес в анонимном окне браузера.
Что делатьВозвращаем активность и даты показа, а закрытые от гостей разделы в карте не ждём.
-
Файл перекрыт правилом веб-сервера примерно 8% случаев
ПризнакНа диске карта свежая и полная, а по адресу сайта отдаётся старая.
ПроверкаСравниваем содержимое файла в корне с тем, что вернул запрос к адресу.
Что делатьУбираем статичную копию и правило сервера, которое отдаёт файл мимо карты модуля.
Частые вопросы
Нажал «Сохранить», а файл карты не появился - почему?
Кнопки ведут себя по-разному: «Сохранить» только запоминает настройку, «Сохранить и запустить» ещё и собирает файл, «Запустить» собирает по ранее сохранённой настройке. Для первого файла нужна одна из двух последних.
В карте только разделы, товаров нет - что не так?
На вкладке инфоблоков отмечены не все уровни включения. Автогенерация, список, секции и элементы включаются отдельно, и без отметки на элементах адреса карточек в файл не попадут.
Почему в карте нет страниц своего компонента на highload-блоке?
Штатная генерация обходит файлы, инфоблоки и форумы, а о highload-блоке ничего не знает. Такие адреса добавляют своим файлом карты и ссылкой на него в robots.txt.
Карта не обновлялась месяц, посещаемость низкая - что делать?
Пересборку выполняет агент, а агенты запускаются посетителями. Агенты переводят на планировщик операционной системы, и тогда карта пересобирается по расписанию, а не по случайному хиту.
На поддомене города отдаётся карта основного сайта - это сбой?
Нет, если поддомен не заведён отдельным сайтом: своего набора у него тогда нет. Либо заводят второй сайт со своей картой, либо отдают нужный файл правилом веб-сервера.
Смежное
- ЧПУ и SEO комплексного компонента - оглавление подтемы
- Карта сайта и robots.txt: генерация, расписание, мультисайт - настройка с нуля, а не разбор неполного файла
- Агенты не выполняются: разбор причин - почему пересборка не стартует
- Агенты изнутри: расписание, хиты, cron - как агент выбирает момент запуска
- Дубли страниц каталога: канонический адрес, пагинация, фильтр - что в карту класть не нужно
- ЧПУ комплексного компонента: настройка и разбор 404 - откуда берутся адреса каталога
- Элемент не появляется в списке: разбор причин - активность и даты показа элемента
- Региональность магазина: выбор города, цены и склады - карта на региональных поддоменах
- Код для двух сайтов: текущий сайт, настройки, общие данные - мультисайт и свои наборы файлов
- Компоненты 2.0 - устройство компонентов целиком