Скрипт Нотифлоу не обнаружен на сайте — что делать
Если в кабинете рядом с доменом висит статус «скрипт чата не обнаружен», значит, Нотифлоу не получил ни одного события с вашего сайта за последние 5 минут. Причина почти всегда в одной из 6 вещей: код не вставлен, вставлен не на той странице, домен в кабинете не совпадает с реальным, CDN или браузер закэшировали старую версию, в SPA не реинициализируется на роутинге, либо cookie-баннер блокирует загрузку. Ниже — диагностический чек-лист, который закрывает 95% случаев.
Что означает статус «скрипт чата не обнаружен»
Каждый раз, когда страница вашего сайта загружается, скрипт cdn.notiflow.ru/widget.js отправляет в кабинет короткое событие pageview с указанием домена и project_id. Если за последние 5 минут таких событий не пришло, в кабинете рядом с доменом загорается красный индикатор «Скрипт не обнаружен».
Это значит ровно одно: события не доходят. Причина обычно на одном из четырех уровней:
- На уровне HTML. Код не вставлен, вставлен в неправильное место или загружается с ошибкой.
- На уровне сети. Запрос к CDN блокируется CSP, AdBlock, корпоративным firewall или сервис-воркером.
- На уровне настройки. Скрипт работает, но домен в кабинете отличается от реального.
- На уровне роутинга SPA. Скрипт загрузился один раз, но
Нотифлоу.pageview()не вызывается на смене маршрута.
Идите по шагам ниже сверху вниз — порядок выстроен по частоте причин.
Шаг 1. Проверьте, что код вставлен в правильное место
Откройте сайт в браузере. Нажмите Ctrl+U (или ПКМ → «Просмотр кода страницы»). В открывшемся окне нажмите Ctrl+F и найдите строку cdn.notiflow.ru/widget.js. Что должно быть:
- строка присутствует;
- она расположена перед закрывающим
</body>или внутри<head>; - атрибут
data-project-idсодержит вашproject_idиз кабинета; - тег
<script>идет без атрибутаtype="text/plain"илиdata-cmp-blocked.
Чего быть не должно:
- комментарий
<!-- -->вокруг скрипта (комментировали для теста и забыли раскомментировать); - скрипт внутри
<noscript>; - ссылка на
cdn.notiflow.ruс опечаткой типаnotiflo.ruилиcdn.notify.ru; - атрибут
asyncбез callback — на медленных каналах скрипт не успевает зарегистрироваться до закрытия вкладки.
Если скрипт вставлен через Google Tag Manager, проверьте в GTM Preview Mode, что тег действительно срабатывает на этом URL — частая ошибка в триггере, который ограничивает GTM конкретными страницами.
Шаг 2. Проверьте домен проекта — самая частая причина
Откройте «Каналы → Чат на сайте → Домены» в кабинете. Сравните точно:
- В кабинете записан
example.ru, а сайт открывается наwww.example.ru— не совпадает. Решение: включите тумблер «www-версия» или добавьтеwww.example.ruотдельной записью. - В кабинете
example.ru, а сайт наapp.example.ru— это разные домены. Поддомен добавляется отдельно. - В кабинете
https://example.ru, а скрипт думает домен —example.ruбез протокола. Нотифлоу ожидает домен безhttps://и без слеша в конце. - В кабинете указан старый домен после миграции — Нотифлоу не подтянет редирект автоматически, добавьте новый адрес.
Если адрес сайта меняется в зависимости от подписки или мультитенанта (tenant1.app.ru, tenant2.app.ru), стандартная форма не подходит — напишите в поддержку, мы включим wildcard на уровне проекта.
Шаг 3. Проверьте через консоль браузера
Откройте сайт, F12 → вкладка «Network». Перезагрузите страницу. В фильтре наберите notiflow. Что должно быть видно:
- Запрос к
cdn.notiflow.ru/widget.jsсо статусом 200 OK. - Сразу после него — запрос к
api.notiflow.ru/v1/trackсо статусом 200 и payloadpageview.
Если запроса к widget.js нет — скрипт не загрузился вообще. Идите к шагам 1 и 4.
Если запрос есть, но статус 403 — домен сайта не разрешен в кабинете. Возвращайтесь к шагу 2.
Если запрос с 200 OK есть, а к api.notiflow.ru — нет, в консоли (вкладка Console) обычно видна ошибка. Самые частые:
Нотифлоу: project_id is missing— забыли атрибутdata-project-idв теге.Refused to load... Content Security Policy— на сайте CSP, иcdn.notiflow.ruнужно добавить вscript-src, аapi.notiflow.ru— вconnect-src.Failed to fetchбез других пояснений — обычно AdBlock или корпоративный прокси блокирует запрос.Нотифлоу: domain not allowed— домен из URL не совпадает с записями в кабинете, см. шаг 2.
Проверить инициализацию вручную можно в консоли: введите Нотифлоу.version — должна вернуться строка вида 2.4.1. Если Нотифлоу is not defined, скрипт не выполнился, идите к шагу 1.
Шаг 4. Кэш сайта, CDN и сервис-воркеры
Если код вставлен правильно, но в браузере его нет — между вами и пользователем стоит кэш. Возможные виновники:
- CDN сайта (Cloudflare, Selectel CDN, BunnyCDN) — закэшировал старую версию HTML без вашего кода. Решение: инвалидация кэша в панели CDN.
- Reverse-proxy / Varnish — то же самое, инвалидация по URL.
- Service Worker — если сайт на PWA, сервис-воркер может отдавать закэшированный HTML. F12 → Application → Service Workers → «Unregister» для теста.
- Браузерный кэш — Ctrl+Shift+R или режим инкогнито.
Полезно проверить, что за версию HTML видит пользователь: F12 → Network → Doc → выбрать корневой запрос → вкладка Response. Там должен быть актуальный HTML с вашим скриптом. Если нет — это кэш где-то по пути.
Особенности SPA-сайтов: Next.js, Vue, React
В классическом сайте каждый переход между страницами — это новый HTTP-запрос, и скрипт инициализируется автоматически. В SPA (Next.js, Nuxt, React, Vue) переходы происходят без перезагрузки, и Нотифлоу не понимает, что URL поменялся.
Что нужно делать в SPA:
- Скрипт вставлен один раз — в
_document.tsx(Next.js), вindex.html(Vite/CRA) или в layout (Nuxt). - На каждом переходе между маршрутами вызывайте
Нотифлоу.pageview()вручную.
Пример для Next.js App Router:
"use client";
import { usePathname } from "next/navigation";
import { useEffect } from "react";
export function НотифлоуPageview() {
const pathname = usePathname();
useEffect(() => {
if (typeof window !== "undefined" && window.Нотифлоу) {
window.Нотифлоу.pageview();
}
}, [pathname]);
return null;
}
Без этого вызова после первой загрузки события pageview не уходят, и в кабинете для глубоких страниц SPA статус будет «не обнаружен», даже если на главной все работает.
Cookie-баннеры и блокировщики
Если на сайте стоит CMP-решение для согласия на cookie (CookieScript, OneTrust, Юником24), скрипт Нотифлоу может быть заблокирован до получения согласия. Это сделано правильно с точки зрения 152-ФЗ, но визуально выглядит как «не работает».
Что проверить:
- В CMP скрипт
cdn.notiflow.ru/widget.jsотнесен к категории «Аналитика» или «Функциональные». - Скрипт не загружается с атрибутом
type="text/plain"илиdata-cmp-blocked="true"— это типичные паттерны блокировки до согласия. - После клика «Принять все» в баннере перезагрузите страницу — скрипт должен подгрузиться.
- В режиме инкогнито без расширений скрипт работает — так отделяете блокировку CMP от блокировки AdBlock.
AdBlock и корпоративные firewall (Cisco Umbrella, Yandex Cloud Edge) иногда заносят cdn.notiflow.ru в категорию «трекеры» и блокируют. Нотифлоу хранит данные в РФ (см. «Геосервис данных в России») — этого аргумента обычно достаточно, чтобы согласовать домен с corporate IT.
Если ничего не помогло — что сообщить в поддержку
Когда чек-лист пройден, а скрипт все равно не виден, напишите на support@notiflow.ru и приложите:
- URL страницы, где должен работать скрипт.
- Скриншот с сайта: F12 → Network → фильтр
notiflow, вкладка перезагружена. - Скриншот: F12 → Console → последняя ошибка, если есть.
- Команда
Нотифлоу.versionиз консоли — что она возвращает. - Стек технологий: чистый сайт / Next.js / Bitrix / Tilda / WordPress.
С этими 5 пунктами поддержка обычно отвечает в течение часа в рабочее время. Без них уйдет в полтора раза дольше — мы будем спрашивать все это сами.
Часто задаваемые вопросы
Куда вставлять скрипт — в <head> или перед </body>?
Перед </body> — это рекомендованный вариант, потому что не блокирует первичный рендер страницы. В <head> тоже работает, но добавляйте атрибут defer, иначе будет небольшая задержка отрисовки.
Сколько ждать, чтобы статус обновился после установки?
1–2 минуты с момента первой загрузки страницы со скриптом. Если через 5 минут статус все еще «не обнаружен», проверьте Network в DevTools — запрос к cdn.notiflow.ru/widget.js должен идти со статусом 200.
Может ли AdBlock блокировать виджет?
Да, отдельные правила uBlock Origin и AdGuard блокируют чат-виджеты по списку трекеров. Проверить просто: откройте сайт в режиме инкогнито без расширений — если скрипт там работает, виноват AdBlock.
Почему скрипт работает на одной странице, но не на другой?
В классическом сайте — код вставлен только в один шаблон (например, главную), а на других страницах его нет. В SPA — забыт вызов Нотифлоу.pageview() на смене маршрута.
Как проверить установку через DevTools?
F12 → Network → фильтр notiflow, перезагрузка страницы. Должны быть два запроса: widget.js (200) и track (200). В Console команда Нотифлоу.version возвращает строку версии. Если возвращает Нотифлоу is not defined — скрипт не загрузился.
Нужно ли перезагружать кэш CDN после вставки кода?
Да. Если перед вашим сайтом стоит Cloudflare, Selectel CDN или Varnish, инвалидируйте кэш по URL страниц, куда вставили скрипт. Иначе пользователи продолжат получать старую версию HTML без вашего кода.
Если шаги выше не помогли, напишите в поддержку с приложениями из последнего раздела — мы разберемся индивидуально. Чтобы зарегистрироваться и получить новый снипет — cp.notiflow.ru/auth/register. Если еще не добавили домен, см. «Как добавить домен в проект», а после починки скрипта переходите к «Как создать первый виджет». Подробнее про продукт — на странице Чат на сайте.