Обходчик греет то, что есть в его перечне. Если перечень составлен руками — «главная, каталог, типы записей такие-то», — он устаревает с первой же новой рубрикой. Гарантия «никогда MISS» начинается с того, что перечень выводится сам.

Это двадцать восьмая часть цикла «Кэш страниц без MISS».

Что пропадает при ручном перечне

На двух сайтах одной темы в перечне не оказалось архива каталога — самой главной страницы после главной. Перечислены были типы записей и рубрики, а архив типа (has_archive) — нет. Ни один список, составленный руками, не знал, что такая страница существует.

Три источника

  1. Перечисление из WordPress: публичные типы записей (только те, у которых есть свои страницы), все архивы типов с пагинацией, все таксономии с непустыми терминами, страница блога.
  2. Карта сайта (Yoast или встроенная в ядро) — ловит то, что перечисление пропустило.
  3. Самоочистка по коду ответа — адреса, которые отвечают редиректом или 404, запоминаются как мёртвые и больше не греются; у редиректа греется цель.
foreach (get_post_types(['public' => true], 'objects') as $type) {
    // у типа без своих страниц get_permalink рисует ссылку на 404
    if (!$type->publicly_queryable && $type->name !== 'page') {
        continue;
    }
    if ($type->has_archive) {
        $paths[] = wp_make_link_relative(get_post_type_archive_link($type->name));
    }
    // + все записи этого типа
}

Самоочистка: что запоминать

ОтветЧто делать
301, 302, 308запомнить как мёртвый, прогреть цель редиректа
404, 410запомнить как мёртвый
5xx, таймаут, нет ответане запоминать — только посчитать

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

Цифры

  • тестовая копия: из 63 адресов живых 37, отброшено 26 — из них 25 давали 404 у служебного типа записи;
  • рабочий сайт: 90 адресов, карта сайта дала 119, из них 37 — мусор;
  • на другом сайте за первый час самоочистка поймала 7 адресов, карта сайта дала 327.

Бонус: отчёт о мусоре в карте сайта

Список мёртвых адресов — готовый отчёт для SEO. На одном сайте Yoast публиковал в карте около 33 адресов, которые отвечали 404.

Грабли

  • Карту сайта берите из кэша и обновляйте отдельным кроном. Сначала мы собирали её прямо в запросе выката — до шести HTTP-запросов по 15 секунд. Запрос не доживал до постановки очереди, и в кэше оставался 1 файл.
  • Событие круга ставьте до сбора адресов, а не после: если сбор упадёт, круг всё равно состоится.
  • Служебные типы — в исключения отдельным списком.
  • Потолок списка мёртвых — с запасом: одна волна дала 472 мусорных адреса, а потолок был 500.

Не уверены, что прогрев видит все страницы?

Пришлите адрес — сверю перечень обхода с тем, что реально есть на сайте.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.