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

Состояние сайтов и SEO

Следите за сайтами пакетно, один монитор на сайт: получайте уведомление, когда сайт ломается (ошибка, недоступность, недействительный сертификат, цикл перенаправлений), когда его страница становится пустой, когда он выпадает из поисковых систем (noindex, robots.txt, блокирующий всё) и когда меняются метаданные, которые показывает Google (заголовок, описание, canonical URL, конечный адрес). Каждый сайт также относится к платформе, на которой он работает (WordPress, Shopify, Wix, Next.js…).

Если нужно содержимое страницы, а не её состояние, см. Изменения на сайтах.

  1. В адресе вставьте страницу для проверки, обычно главную, с https:// или без. Перенаправления отслеживаются: http на https и example.com на www.example.com — это норма, сообщается только о цикле перенаправлений или переходе на другой адрес.
  2. При желании заполните «Expected text» фразой, которая всегда должна присутствовать на странице, и настройте «Blank page below», если страница намеренно короткая.
  3. Первая проверка записывает эталон: конечный адрес, заголовок, описание, canonical URL, правила индексации. Они сравниваются снова каждые 6 часов по умолчанию («Check for changes every»), тогда как доступность проверяется на каждом интервале опроса. Об изменении сообщается, только когда его увидели две проверки подряд, поэтому A/B-тесты и капризные кэши не вызывают шума.
  4. Чтобы добавить много сайтов сразу, импортируйте CSV-файл из списка мониторов: каждый сайт помещается в Websites/<platform> (WordPress, Shopify…), если вы не укажете папку.

На каждом интервале опроса (по умолчанию 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 redirects10Максимум отслеживаемых перенаправлений (от 0 до 30).
User agentDumbMonit/<version>Отправляется вместо собственного User-Agent DumbMonit.
Ignore query stringsonПараметры 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 targetsoffДля сайта, который обслуживает сам хост 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.

Из списка мониторов или со страницы добавления монитора 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_up1, когда конечный ответ успешен (2xx или 3xx), иначе 0.
dumbmonit_website_status_codeHTTP-статус конечного ответа.
dumbmonit_website_response_secondsОбщее время, включая перенаправления.
dumbmonit_website_redirect_hopsОтслеженные перенаправления.
dumbmonit_website_https1, когда конечный адрес использует 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_blank1, когда этот текст ниже порога.
dumbmonit_website_expect_text_missing1, когда ожидаемый текст отсутствует (параметр задан).
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_changed1 в течение 24 часов после подтверждённого изменения.
dumbmonit_website_robots_blocks_all1, когда robots.txt запрещает всё для Googlebot.
dumbmonit_website_sitemap_ok1, когда карта сайта отвечает и читается.
ОповещениеКогдаСерьёзность
Monitor unreachableНет ответа, сертификат отклонён, цикл перенаправлений или слишком много перенаправленийcritical
Website downКонечный ответ — ошибка 4xx или 5xx, в течение 3 минутcritical
Website page blankВидимый текст ниже порога, в течение 3 минутcritical
Website expected text missingОжидаемый текст отсутствует, в течение 3 минутwarning
Website not indexablenoindex на странице, в течение 10 минутcritical
Website blocked by robots.txtrobots.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-агент.