Состояние сайтов и SEO¶
Следите за сайтами пакетно, один монитор на сайт: получайте уведомление, когда
сайт ломается (ошибка, недоступность, недействительный сертификат, цикл
перенаправлений), когда его страница становится пустой, когда он выпадает
из поисковых систем (noindex, robots.txt, блокирующий всё) и когда
меняются метаданные, которые показывает Google (заголовок, описание,
canonical URL, конечный адрес). Каждый сайт также относится к платформе, на
которой он работает (WordPress, Shopify, Wix, Next.js…).
Если нужно содержимое страницы, а не её состояние, см. Изменения на сайтах.
Настройка¶
- В адресе вставьте страницу для проверки, обычно главную, с https:// или без. Перенаправления отслеживаются: http на https и example.com на www.example.com — это норма, сообщается только о цикле перенаправлений или переходе на другой адрес.
- При желании заполните «Expected text» фразой, которая всегда должна присутствовать на странице, и настройте «Blank page below», если страница намеренно короткая.
- Первая проверка записывает эталон: конечный адрес, заголовок, описание, canonical URL, правила индексации. Они сравниваются снова каждые 6 часов по умолчанию («Check for changes every»), тогда как доступность проверяется на каждом интервале опроса. Об изменении сообщается, только когда его увидели две проверки подряд, поэтому A/B-тесты и капризные кэши не вызывают шума.
- Чтобы добавить много сайтов сразу, импортируйте CSV-файл из списка мониторов: каждый сайт помещается в
Websites/<platform>(WordPress, Shopify…), если вы не укажете папку.
Warning
Читается только то, что отправляет сервер: страница, целиком отрисованная JavaScript, здесь выглядит пустой. Для такого сайта уменьшите «Blank page below» до 0.
Что делает каждая проверка¶
На каждом интервале опроса (по умолчанию 60 с) страница читается один раз:
- Перенаправления отслеживаются одно за другим, до Max redirects (по
умолчанию 10), и цепочка записывается: каждый адрес и его статус. Переход с
http://наhttps://или сexample.comнаwww.example.com— то, что делает большинство сайтов, и никогда не является ошибкой. Перенаправление, возвращающееся на уже виденный адрес, — это цикл, а превышение допустимого числа перенаправлений тоже ошибка: в обоих случаях проверка завершается неудачей с цепочкой в сообщении, как для сайта, который не отвечает. - Конечный ответ: его HTTP-статус, общее время (с перенаправлениями) и TLS-сертификат, проверяемый так же, как это делает браузер. Отклонённый сертификат приводит к неудаче проверки.
- Видимый текст страницы, как в Изменения на сайтах: скрипты, стили и скрытые блоки исключаются. Если символов меньше, чем Blank page below (по умолчанию 20, чтобы короткие легитимные страницы проходили), страница считается пустой. При заданном Expected text эта фраза должна в нём присутствовать (регистр и пробелы игнорируются).
- SEO-метаданные конечной страницы:
<title>, meta description, canonical URL, мета-теги robots и заголовкиX-Robots-Tag(noindex,nofollow,none),og:title,og:description,<html lang>, число<h1>и альтернативhreflang. Директивы индексации и счётчики сообщаются при каждой проверке; сравнение метаданных с эталоном происходит только при проверках изменений, см. ниже. - При проверках изменений и не чаще раза в час —
robots.txtконечного сайта: запрещает ли он Googlebot (или*) обходить/? И карта сайта, о которой он сообщает, или/sitemap.xml: отвечает ли она и читается ли как карта сайта?
User-Agent — DumbMonit/<version>, если User agent не задаёт иное.
Изменения, подтверждённые дважды¶
Конечный адрес и метаданные сравниваются с эталоном, но не при каждой проверке:
только при проверках изменений, каждые Check for changes every минут (по
умолчанию 360, то есть 6 часов; DUMBMONIT_WEBSITE_CHANGE_CHECK_MINUTES задаёт
значение по умолчанию для всего сервера, 0 сравнивает при каждой проверке).
Доступность, пустая страница и ожидаемый текст по-прежнему читаются на каждом
интервале опроса.
Другое значение, увиденное при проверке изменений, пока только ожидает
подтверждения; ближайшая следующая проверка (через один интервал опроса, а не
через 6 часов) смотрит на него снова, и оно становится изменением, если эта
проверка тоже его видит. Поэтому об изменении сообщается не позже чем через один
период изменений плюс один интервал опроса после его появления. Страница,
отдаваемая в двух версиях (A/B-тест), колеблющийся кэш или усечённый ответ
поэтому не вызывают шума. Значения сравниваются без учёта пробелов и регистра;
адреса игнорируют схему, ведущий www., завершающий / и, при включённом
Ignore query strings (по умолчанию включено), параметры URL, такие как
?utm_source=….
Подтверждённое изменение сохраняется в истории монитора (поле, до, после,
дата), а его индикатор (dumbmonit_website_title_changed…) остаётся равным 1 в
течение 24 часов. Первая проверка только записывает эталон. Смена адреса или
Ignore query strings начинает новый эталон, вместо того чтобы сообщать об
изменении.
Параметры¶
| Параметр | По умолчанию | Значение |
|---|---|---|
| Expected text | пусто | Фраза, которая должна присутствовать на странице. |
| Blank page below (characters) | 20 | Видимый текст короче этого значения — пустая страница; 0 отключает проверку. |
| Max redirects | 10 | Максимум отслеживаемых перенаправлений (от 0 до 30). |
| User agent | DumbMonit/<version> |
Отправляется вместо собственного User-Agent DumbMonit. |
| Ignore query strings | on | Параметры URL не учитываются при сравнении адресов. |
| Check for changes every (minutes) | 360 | Как часто сравниваются метаданные, конечный адрес и robots.txt, от 0 до 10080; 0 означает при каждой проверке. Пусто: значение по умолчанию сервера (DUMBMONIT_WEBSITE_CHANGE_CHECK_MINUTES). |
| Wait before the next request to this domain (seconds) | 2 | Минимальный промежуток после проверки этого сайта перед другой проверкой того же домена, от 0 до 3600. Пусто: значение по умолчанию сервера (DUMBMONIT_WEBSITE_HOST_SPACING_SECS). |
| Allow loopback and link-local targets | off | Для сайта, который обслуживает сам хост DumbMonit. |
Темп для сотен сайтов¶
Проверки никогда не уходят одним залпом, чтобы файрвол или CDN перед сайтами не принял DumbMonit за атаку:
- Распределение по интервалу: каждый сайт стартует в собственный фиксированный момент внутри своего интервала опроса, так что сайты, добавленные вместе (импорт CSV), не срабатывают в одну секунду.
- Глобальный предел: не более
DUMBMONIT_WEBSITE_MAX_CONCURRENTпроверок сайтов одновременно (по умолчанию 10), сверхDUMBMONIT_MAX_CONCURRENT_PROBES. - На домен: не более
DUMBMONIT_WEBSITE_MAX_PER_HOSTпроверок одновременно в сторону одного домена (по умолчанию 1) и не менееDUMBMONIT_WEBSITE_HOST_SPACING_SECSсекунд между двумя из них (по умолчанию 2, либо Wait before the next request to this domain сайта). Домен — это регистрируемое имя:www.example.com,shop.example.comиexample.comделят один,example.co.uk— один; клиентские поддомены хостинг-платформ (*.myshopify.com,*.wordpress.com,*.github.io,*.netlify.app…) считаются каждый отдельно.
Сайт, предыдущая проверка которого всё ещё ждёт своей очереди, пропускает раунд, а не встаёт в очередь дважды. Поэтому много сайтов на одном домене с коротким интервалом опроса проверяются реже, чем запрошено: увеличьте интервал или лимиты на домен, если список мониторов показывает их с опозданием. См. Конфигурация.
Определение платформы¶
Платформа определяется по порядку: по тегу <meta name="generator">, по
заголовкам, характерным для хоста или движка (x-shopify-*, x-wix-*,
x-drupal-cache, x-powered-by: Next.js…), по следам в разметке
(/wp-content/, cdn.shopify.com, data-wf-site, __NEXT_DATA__, /_nuxt/…)
и, наконец, по самому хосту (*.myshopify.com, *.wixsite.com…). Распознаются:
WordPress, Shopify, Wix, Squarespace, Webflow, Ghost, Drupal, Joomla,
PrestaShop, Magento, Next.js, Nuxt, Gatsby, Hugo, Jekyll; всё остальное —
Other. Платформа — это метка platform метрики dumbmonit_website_info.
Импорт списка сайтов (CSV)¶
Из списка мониторов или со страницы добавления монитора Import websites (CSV) принимает файл или вставленный текст со строкой заголовка и не более чем 1000 строк:
| Столбец | Обязателен | Значение |
|---|---|---|
url |
да | Адрес сайта. |
name |
нет | Имя монитора; по умолчанию хост. |
folder |
нет | Папка монитора; пусто: Websites/<platform>, определяется однократным чтением сайта. |
tags |
нет | key=value;key=value. |
interval |
нет | Интервал опроса. |
expect_text |
нет | То же, что параметр. |
url,name,folder,tags,interval,expect_text
https://example.com,Example,,client=acme,60s,Example Inc.
https://shop.example.org,Shop,Customers/Acme,,300s,Add to cart
Предварительный просмотр показывает каждую строку и её ошибки до того, как что-либо будет создано; уже отслеживаемый сайт (с тем же конечным адресом) пропускается.
Метрики¶
| Метрика | Значение |
|---|---|
dumbmonit_website_up |
1, когда конечный ответ успешен (2xx или 3xx), иначе 0. |
dumbmonit_website_status_code |
HTTP-статус конечного ответа. |
dumbmonit_website_response_seconds |
Общее время, включая перенаправления. |
dumbmonit_website_redirect_hops |
Отслеженные перенаправления. |
dumbmonit_website_https |
1, когда конечный адрес использует https. |
dumbmonit_website_security_header{header} |
0/1 для каждой метки header (только https): HSTS, nosniff, CSP, X-Frame-Options, frame-ancestors. |
dumbmonit_website_info{platform} |
Всегда 1; метка содержит платформу. |
dumbmonit_website_text_chars |
Символов видимого текста (ответы 2xx). |
dumbmonit_website_blank |
1, когда этот текст ниже порога. |
dumbmonit_website_expect_text_missing |
1, когда ожидаемый текст отсутствует (параметр задан). |
dumbmonit_website_noindex / dumbmonit_website_nofollow |
Директивы индексации. |
dumbmonit_website_h1_count / dumbmonit_website_hreflang_count |
Заголовки <h1>, альтернативы hreflang. |
dumbmonit_website_title_changed, …_description_changed, …_canonical_changed, …_final_url_changed |
1 в течение 24 часов после подтверждённого изменения. |
dumbmonit_website_robots_blocks_all |
1, когда robots.txt запрещает всё для Googlebot. |
dumbmonit_website_sitemap_ok |
1, когда карта сайта отвечает и читается. |
Встроенные оповещения¶
| Оповещение | Когда | Серьёзность |
|---|---|---|
| Monitor unreachable | Нет ответа, сертификат отклонён, цикл перенаправлений или слишком много перенаправлений | critical |
| Website down | Конечный ответ — ошибка 4xx или 5xx, в течение 3 минут | critical |
| Website page blank | Видимый текст ниже порога, в течение 3 минут | critical |
| Website expected text missing | Ожидаемый текст отсутствует, в течение 3 минут | warning |
| Website not indexable | noindex на странице, в течение 10 минут |
critical |
| Website blocked by robots.txt | robots.txt запрещает всё, в течение 10 минут |
critical |
| Website canonical URL changed | Подтверждённое изменение | warning |
| Website address changed | Конечный хост или путь изменились, подтверждено | warning |
| Website title or description changed | Подтверждённое изменение | info |
| Website slow | Более 5 секунд, в течение 10 минут | warning |
Проверка выполняется на самом сервере DumbMonit: она не может идти через relay-агент.