# Карта сайта: откуда берётся каталог

> Почему обход начинается с sitemap.xml, что из него берётся, и что происходит, когда карты нет

Источник: https://docs.parreq.com/crawl-sitemap/

Обход по ссылкам — способ узнать устройство чужого каталога, когда сайт ничего
о себе не говорит. Но чаще говорит: `sitemap.xml` есть почти у всякого
магазина, и в нём лежит ровно то, что мы иначе добываем заходами.

Поэтому готовое решение начинает с карты, а по ссылкам идёт только тогда, когда
карты нет.

## Что это даёт

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

**Чистоту.** В карту сайта не кладут фасеты. Метки, подбор по цвету,
сортировки — всё, что описано на странице [что не
каталог](https://docs.parreq.com/crawl-not-catalog), — владелец сайта индексировать не хочет, а
значит и в карту не пишет. Мусор отсекается даром и до первого захода.

## Как она ищется

1. `robots.txt` — единственное место, где сайт **сам** говорит, где его карта.
   Спрашиваем его первым.
2. Если он молчит — пробуем обычные имена: `/sitemap.xml`,
   `/sitemap_index.xml`, `/sitemap-index.xml` и ещё пару.

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

Карта-указатель (`<sitemapindex>`) разворачивается на этаж вглубь; сама она в
результат не попадает — в ней не страницы сайта, а другие карты.

## Что из неё берётся

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

Адреса группируются по форме пути, и роли раскладывает модель:

```
  0. /catalog/<*>              (37 шт., пример /catalog/kraska/)     → разделы
  1. /catalog/<*>/<*>          (2418 шт., пример /catalog/kraska/…)  → карточки
  2. /blog/<*>                 (94 шт., пример /blog/kak-vybrat/)    → мусор
```

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

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

## Когда карты нет

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

> **К сведению.**
>   Что именно вышло, видно в записке задания: `карта сайта
>   https://shop.example/sitemap-catalog.xml: 2549 адресов, из них товаров 2418,
>   разделов 37, отброшено не каталога 94` — или `карты сайта нет — идём по
>   ссылкам`.

## Обычный обход по своему правилу

Всё сказанное относится к готовым решениям. `/v1/crawl` с правилом, которое
написали вы, карту не ищет и в неё не заглядывает: начальный адрес, селектор
ссылок и фильтры там ваши.
