Сторонние скрипты: вес, который вы не писали
Аналитика, менеджеры тегов, чат-виджеты и пиксели по отдельности выглядят безобидно. Вместе они решают, насколько быстра ваша страница, — разбираемся, как провести инвентаризацию и сократить их.
Производительность · Опубликовано: 3 октября 2026 г. · 6 мин чтения · Ольга Мирошник
Откройте вкладку Network почти на любом коммерческом сайте и посчитайте домены. Свой домен, CDN, а дальше длинный хвост: аналитика, менеджер тегов, два рекламных пикселя, чат-виджет, инструмент A/B-тестирования, сервис шрифтов, карта, встроенное видео. Ни строчки этого кода не написала ваша команда, ничего из него не проходит ревью в ваших пул-реквестах — и всё это выполняется с теми же правами, что и ваш собственный JavaScript.
Каждый тег добавили по уважительной причине люди, которым он был нужен. Беда в том, что за сумму не отвечает никто.
Во что обходится каждый новый источник
Установка соединения. Новый домен — это DNS-запрос, TCP-рукопожатие и TLS-согласование ещё до того, как придёт первый байт скрипта. На мобильной связи это легко несколько сотен миллисекунд на каждый источник, а скрипт, который подгружает другие скрипты с ещё одного домена, платит эту цену повторно.
Время главного потока. Сторонний JavaScript нужно скачать, разобрать и выполнить в том же потоке, который обрабатывает клики и касания. Чат-виджет, поднимающий целый UI-фреймворк, или A/B-инструмент, переписывающий DOM, напрямую конкурируют с взаимодействиями на вашей странице — и это видно по плохому INP (Interaction to Next Paint).
Блокировка рендеринга. Обычный <script src> в <head> без async или defer останавливает парсер, пока скрипт не будет загружен и выполнен. Некоторые сниппеты A/B-тестов делают это намеренно и прячут страницу до своего завершения, чтобы избежать мигания.
Единая точка отказа. Если сервер вендора тормозит или лежит, блокирующий скрипт делает медленной или пустой и вашу страницу. Ваша доступность теперь зависит от чужой, а мониторинг не подскажет, в чём причина.
Приватность и согласие. Пиксель, сработавший до того, как посетитель ответил на cookie-баннер, отправляет его данные третьей стороне без согласия. Зачастую одной загрузки скрипта достаточно, чтобы передать IP-адрес и реферер.
Безопасность. Каждый внешний скрипт — часть вашей цепочки поставок. Если взломают вендора или CDN, код злоумышленника выполнится на вашей странице оформления заказа. Строгую Content Security Policy написать куда сложнее, когда список разрешённых источников растёт с каждым тегом.
Проведите инвентаризацию
Начинайте с фактов, а не с воспоминаний:
- В Chrome DevTools откройте Network, перезагрузите страницу и сгруппируйте или отсортируйте запросы по домену. Выпишите каждый чужой источник и то, что с него грузится.
- Откройте панель Coverage и посмотрите, какая часть каждого скрипта реально выполняется на типичной странице.
- Загляните в менеджер тегов: составьте список всех тегов, их триггеров и даты последнего изменения.
По каждому тегу задайте три вопроса. Кто за него отвечает? Если никто не может назвать человека или команду — это кандидат на удаление. Им ещё пользуются? Пиксели кампаний, закончившихся в прошлом году, и пробные версии так и не купленных инструментов — частая находка. Нужно ли ему грузиться на каждой странице и сразу? Обычно нет.
С первым шагом поможет отчёт SiteScan: он считает сторонние источники, с которых ваши страницы загружают ресурсы, и предупреждает, если их слишком много («Сократите число сторонних источников, с которых загружаются страницы»). Кроме того, он показывает обнаруженные на сайте технологии и виджеты — быстрый способ заметить забытый инструмент.
Приёмы, которые работают
Удаляйте. Самый быстрый скрипт — тот, которого нет. Удалить два мёртвых тега выгоднее, чем оптимизировать пять живых.
Откладывайте то, что осталось. Аналитике и большинству пикселей подходят async или defer, либо запуск из менеджера тегов после загрузки страницы. Всё, что не рисует первый экран, не должно его блокировать.
Загружайте по взаимодействию. Чат-виджету или видео с YouTube незачем стартовать, пока они никому не понадобились. Покажите лёгкий фасад — статичную кнопку или превью-картинку — и подгрузите настоящий компонент по клику:
<button class="chat-facade" type="button">Написать нам</button>
<script>
document.querySelector(".chat-facade").addEventListener("click", () => {
const s = document.createElement("script");
s.src = "https://widget.example-chat.com/loader.js";
document.head.append(s);
}, { once: true });
</script>
Размещайте у себя, если позволяет лицензия. Шрифты и небольшие библиотеки, отдаваемые с вашего домена, обходятся без лишнего соединения и подчиняются вашим правилам кеширования.
Используйте preconnect экономно. <link rel="preconnect"> помогает для одного-двух сторонних источников на критическом пути. Если прописать его для десяти, вы просто потратите ранний трафик и сокеты на то, что не срочно.
Держите менеджер тегов в порядке. Ограничьте круг тех, кто может публиковать, требуйте для каждого тега описание и ответственного, регулярно пересматривайте контейнер. Менеджер тегов делает добавление скриптов простым — но не должен делать его незаметным.
Фиксируйте статичные файлы через Subresource Integrity. Для версионированной библиотеки на публичном CDN атрибут integrity заставит браузер отказаться от изменённого файла:
<script src="https://cdn.example.com/lib@2.4.1/lib.min.js"
integrity="sha384-..."
crossorigin="anonymous"></script>
SRI не работает со скриптами, которые вендор меняет на месте, — именно поэтому они и заслуживают самого пристального внимания.
Заведите бюджет. Договоритесь о лимите — числе сторонних источников, килобайтах стороннего JavaScript — и проверяйте его перед запуском каждого нового тега. Бюджет превращает «ещё один пиксель, и всё» в осознанное решение.
Чек-лист
- Для каждого стороннего источника записаны ответственный и назначение.
- Неиспользуемые теги и пиксели завершённых кампаний удалены.
- Ни один сторонний скрипт не блокирует отрисовку первого экрана.
- Чат-виджеты и встроенные видео грузятся по взаимодействию через фасад.
- Ничто, что отслеживает посетителей, не загружается до согласия.
- Preconnect используется только для одного-двух критичных источников.
- У статичных файлов с CDN есть атрибут
integrity. - Бюджет на сторонний код существует, и новые теги проверяются по нему.
Читайте также
Проверьте, что из этого есть на вашем сайте
Бесплатное сканирование покажет битые ссылки, ошибки JS и проблемы производительности за минуту.