Подписывайтесь на Telegram-канал Анатолия Половинкина основателя компании TolkaDigital

RSS

Really Simple Syndication

RSS (Really Simple Syndication) — открытый XML-формат для автоматической синдикации веб-контента, который позволяет читателям и сервисам получать обновления сайта без необходимости заходить на него напрямую.

Что такое RSS

RSS — это стандартный формат файла на основе XML, который сайт публикует по фиксированному адресу и обновляет при каждой новой публикации. Когда материал выходит в свет, CMS автоматически добавляет его в ленту: заголовок, описание или полный текст, дату, ссылку и уникальный идентификатор. RSS-ридеры и агрегаторы периодически обращаются к этому файлу, сравнивают его содержимое с уже известным и показывают пользователю только то, что появилось с момента прошлой проверки. Важно понять: RSS — не платформа и не сервис, а открытый стандарт, работающий независимо от любой компании. Подписчик получает контент напрямую, без алгоритмических фильтров и без потери охвата. Формат поддерживают все крупные CMS, включая WordPress, Drupal, Joomla и большинство headless-решений.

История RSS начинается в 1999 году, когда сразу несколько команд работали над идеей синдикации контента. Netscape выпустила RSS 0.9 для портала My.Netscape.com, а разработчик Дейв Уинер почти одновременно опубликовал конкурирующую спецификацию. Названия формата менялись несколько раз — Rich Site Summary, RDF Site Summary, — пока в 2002 году при участии Гарвардского университета не устоялось «Really Simple Syndication» в версии 2.0. Эта версия стала де-факто стандартом и намеренно заморожена с 2009 года ради обратной совместимости. В 2003 году в ответ на технические ограничения RSS появился конкурирующий формат Atom — более строгая спецификация с поддержкой Unicode. Сегодня оба формата мирно сосуществуют, и практически все современные агрегаторы понимают оба.

В digital-маркетинге RSS решает одну из ключевых задач контентной стратегии — доставку материала напрямую заинтересованной аудитории без зависимости от алгоритмов платформ. Крупные новостные агрегаторы — Яндекс.Новости, Google News, Feedly, Inoreader, Flipboard — используют RSS как основной протокол получения контента от издателей. Подключение сайта к Яндекс.Новостям через RSS-ленту открывает доступ к десяткам миллионов читателей без рекламного бюджета. Маркетологи используют RSS-ленты конкурентов как инструмент мониторинга публикационной активности — читалки позволяют подписаться сразу на несколько сотен источников и отслеживать изменения в контентной стратегии конкурентов. SEO-специалисты применяют RSS для ускорения индексации: агрегаторы, подключенные к ленте, обнаруживают новый контент в течение часов, а не дней.

Маркетологи, которые считают RSS устаревшим инструментом, упускают несколько серьезных возможностей. У Feedly сегодня более 15 миллионов пользователей — значительная часть из них журналисты, аналитики, b2b-покупатели и лидеры мнений, то есть именно та аудитория, которую сложно и дорого достать через платную рекламу. RSS обеспечивает независимость от платформенных изменений: когда алгоритм Facebook в 2018 году резко снизил органический охват брендовых страниц, издания с развитой RSS-аудиторией не почувствовали потери. Корректно настроенная лента с UTM-метками, WebSub-уведомлениями и полным текстом публикаций говорит о зрелом подходе к дистрибуции контента. Наконец, RSS — резервный канал: если страница в соцсети будет заблокирована или платформа изменит правила монетизации, RSS-подписчики продолжат получать контент в штатном режиме.

Как работает RSS

  1. Генерация XML-файла. CMS создает XML-файл по спецификации RSS 2.0 при каждой публикации нового материала. Файл содержит блок с метаданными канала: название сайта, URL, описание, язык, дата последнего обновления. Каждая запись описывается набором тегов : , , , , . WordPress генерирует ленту по адресу /feed/ и по умолчанию включает последние 10 записей — это количество настраивается в разделе «Чтение» административной панели.</li> <li><strong>Автообнаружение ленты агрегатором.</strong> Пользователь вводит URL сайта или самой ленты в RSS-ридер. Агрегатор сканирует HTML-страницу на наличие тега в блоке и автоматически находит адрес ленты. Без этого тега автообнаружение не срабатывает, и пользователь вынужден вводить адрес ленты вручную — это снижает конверсию в подписчиков. WordPress добавляет нужный тег автоматически; для сайтов на других CMS его нужно прописать в шаблоне вручную.</li> <li><strong>Периодический опрос (polling).</strong> Агрегатор обращается к XML-файлу по расписанию — как правило, раз в 15-60 минут. При каждом запросе он сравнивает GUID материалов из ленты с уже сохраненными идентификаторами и выбирает только новые записи. Для экономии трафика агрегаторы используют HTTP-заголовки If-Modified-Since и ETag: если файл не изменился, сервер отвечает кодом 304 Not Modified без передачи тела. Корректная настройка этих заголовков снижает нагрузку на хостинг при большом числе подписчиков.</li> <li><strong>Парсинг и отображение контента.</strong> После получения нового XML агрегатор извлекает данные из стандартных тегов и рендерит их в своем интерфейсе. Если лента содержит полный текст в теге , читалка отображает статью целиком без перехода на сайт. Если только краткое описание в , пользователь видит анонс со ссылкой. Выбор между полным текстом и анонсом — стратегическое решение: полный текст дает лучший пользовательский опыт, но снижает прямой трафик; анонс генерирует переходы, но часть подписчиков не кликает и контент проходит мимо них.</li> <li><strong>Мгновенное оповещение через WebSub.</strong> Протокол WebSub (ранее PubSubHubbub) устраняет задержку между публикацией и ее обнаружением агрегаторами. После выхода материала сайт мгновенно уведомляет центральный хаб (например, pubsubhubbub.appspot.com), а хаб рассылает уведомления всем подписанным агрегаторам. WordPress поддерживает WebSub через плагин Jetpack; Google публично заявлял об учете WebSub-уведомлений для ускорения индексации. Вместо ожидания следующего цикла polling агрегатор получает обновление в течение секунд после публикации, что критично для новостных изданий.</li> <li><strong>Синдикация медиа через enclosure.</strong> Стандарт RSS поддерживает прикрепление медиафайлов через тег с указанием URL, размера и MIME-типа. Именно этот механизм лежит в основе всей подкаст-индустрии: Apple Podcasts, Spotify, Яндекс.Музыка читают RSS-ленты и скачивают аудиофайлы через enclosure. Расширение Media RSS (mrss), разработанное Yahoo, дает аналогичную возможность для видео и изображений. Яндекс.Видео и часть видеоагрегаторов принимают контент через mrss-ленты, что позволяет продвигать видео без загрузки на каждую платформу отдельно.</li> </ol> <h2>Виды RSS-лент</h2> <ul> <li><strong>Полнотекстовая лента.</strong> Включает полный HTML-текст каждой публикации в теге . Читатель получает весь материал внутри агрегатора без перехода на сайт — это максимально удобно для b2b-аудитории, которая работает с десятками источников одновременно. Такой формат выбирают издания, которые ставят охват и пользовательский опыт выше метрик посещаемости. Минус — сниженный прямой трафик, поэтому для монетизации через баннерную рекламу этот вариант невыгоден.</li> <li><strong>Анонсовая лента.</strong> Содержит только заголовок, краткое описание (обычно первые 55-300 символов или мета-описание) и ссылку на полный материал. Читатель вынужден переходить на сайт, что увеличивает трафик и дает возможность конвертировать его через CTA, подписку на email или платный доступ. Подходит для медиа, монетизирующих просмотры, и b2c-сервисов с активной рекламной моделью. Риск — часть аудитории не кликает на анонсы и постепенно теряет интерес к ленте.</li> <li><strong>Категориальная и тегированная лента.</strong> WordPress и большинство CMS генерируют отдельные RSS-ленты для каждой категории, тега или типа записей. Адрес такой ленты: /category/seo/feed/ или /tag/yandex/feed/. Это позволяет партнерам и агрегаторам подписаться только на нужную тематику, а не на весь поток публикаций. Категориальные ленты используют при синдикации в тематические дайджесты — например, подать только SEO-материалы в профессиональный B2B-ньюслеттер.</li> <li><strong>Подкаст-лента.</strong> Специализированный тип RSS с обязательными тегами iTunes namespace: , , и enclosure с аудиофайлом. По этому формату работает вся мировая подкаст-экосистема. Достаточно создать одну корректную RSS-ленту, чтобы разместить подкаст одновременно в Apple Podcasts, Spotify, Google Podcasts, Яндекс.Музыке и других платформах. Spotify, несмотря на закрытую экосистему, до сих пор поддерживает RSS-импорт для независимых авторов.</li> <li><strong>Atom-лента.</strong> Альтернативный стандарт синдикации 2003 года, разработанный как технически более строгая замена RSS. Использует пространства имен XML, обязательно поддерживает Unicode, четче разделяет краткое содержание и полный текст через отдельные теги<br /> <summary> и . Google Blogger и Feedburner исторически использовали Atom; YouTube RSS-ленты каналов — тоже Atom-формат. Большинство современных агрегаторов воспринимают RSS и Atom одинаково и позволяют подписаться на оба.</li> <li><strong>JSON Feed.</strong> Современный формат синдикации 2017 года, разработанный Метом Биртом и Брентом Симмонсом как ответ на громоздкость XML-парсинга. Лента публикуется в формате JSON и проще интегрируется с JavaScript-приложениями и современными API. Поддерживается генераторами Hugo и Ghost, а для WordPress существуют плагины. Пока уступает RSS 2.0 по распространенности, но популярен среди разработчиков и indie-медиа.</li> </ul> <h2>Сравнение</h2> <table> <thead> <tr> <th>Параметр</th> <th>RSS</th> <th>Email-рассылка</th> <th>Telegram-канал</th> <th>Push-уведомления</th> <th>Atom</th> </tr> </thead> <tbody> <tr> <td>Алгоритмическая фильтрация</td> <td>Отсутствует — все записи доходят до подписчика</td> <td>Спам-фильтры почтовых сервисов</td> <td>Нет фильтрации, но платформа может заблокировать канал</td> <td>Браузеры ограничивают количество уведомлений</td> <td>Отсутствует — аналогично RSS</td> </tr> <tr> <td>Зависимость от платформы</td> <td>Нет — открытый стандарт</td> <td>Зависит от почтового провайдера (Mailchimp, Unisender)</td> <td>Полная зависимость от Telegram</td> <td>Зависит от браузера и ОС</td> <td>Нет — открытый стандарт</td> </tr> <tr> <td>Скорость доставки</td> <td>Секунды (с WebSub) или 15-60 минут (polling)</td> <td>Немедленно, но зависит от очереди отправки</td> <td>Мгновенно</td> <td>Мгновенно</td> <td>Секунды (с WebSub) или по расписанию агрегатора</td> </tr> <tr> <td>SEO-синдикация</td> <td>Высокая — агрегаторы ускоряют индексацию</td> <td>Минимальная — закрытый контент</td> <td>Нет прямого влияния на индексацию</td> <td>Нет влияния на индексацию</td> <td>Высокая — используется Google News и YouTube</td> </tr> <tr> <td>Монетизация</td> <td>Через рекламные тег или полнотекстовую рекламу в </td> <td>Спонсорские вставки, платные рассылки, партнерские ссылки</td> <td>Интеграции, платная подписка Telegram Premium</td> <td>Ограничена — редко используется для монетизации</td> <td>Аналогично RSS, чуть хуже поддержана экосистемой</td> </tr> </tbody> </table> <h2>Пример использования</h2> <p>Онлайн-издание о финансах для малого бизнеса с трафиком 18 000 визитов в месяц публиковало три материала в неделю, но новые статьи попадали в индекс Яндекса в среднем через 48 часов после выхода. Сайт не был подключен ни к одному агрегатору, RSS-лента существовала, но без WebSub и с анонсами вместо полного текста. Аудитория из повторных посетителей составляла всего 9% от общего трафика — читатели забывали о существовании издания между выходами материалов.</p> <p>После настройки полнотекстовой RSS-ленты с WebSub через Jetpack издание подало ленту в шесть агрегаторов: Яндекс.Новости, Google News, Feedly, Inoreader, Flipboard и AllTop. Через 90 дней прирост подписчиков RSS составил 1 240 человек, из них 340 в Feedly. Среднее время индексации новых материалов сократилось с 48 до 4 часов. Трафик из агрегаторов составил 2 800 визитов в месяц — плюс 15,5% к общему объему без каких-либо затрат на рекламу. Показатель глубины сессии у читателей из RSS оказался на 38% выше, чем у аудитории из социальных сетей, что говорит о более высокой вовлеченности RSS-подписчиков.</p> <h2>Частые вопросы</h2> <details> <summary>RSS устарел — зачем использовать его в 2024 году?</summary> <p>RSS не устарел — он стал нишевым, что на практике означает более качественную аудиторию. Люди, которые пользуются RSS-ридерами, осознанно выбирают источники информации и демонстрируют более высокую вовлеченность, чем случайные читатели из социальных сетей. По данным Feedly, платформа насчитывает более 15 миллионов активных пользователей — среди них непропорционально много журналистов, технических специалистов, аналитиков и b2b-покупателей. Google и Яндекс до сих пор используют RSS для сбора контента в свои новостные агрегаторы — без RSS попасть в Яндекс.Новости практически невозможно. После череды скандалов с алгоритмами социальных сетей интерес к RSS снова вырос: по отчету Feedly, в 2022-2023 годах платформа зафиксировала заметный прирост новых пользователей. Для любого сайта с регулярными публикациями RSS — это нулевые затраты на поддержку при реальном приросте охвата.</p> </details> <details> <summary>Как RSS влияет на скорость индексации в Яндексе и Google?</summary> <p>Влияние прямое и подтвержденное. Яндекс.Новости работает на RSS — редакционная команда не может добавить издание в агрегатор без действующей ленты, а попадание в Яндекс.Новости ускоряет индексацию всего домена за счет повышенного краулинга. Google заявил в официальной документации Search Central, что учитывает Sitemap и RSS как инструменты обнаружения контента — особенно для новых URL. Совместное использование RSS с WebSub-уведомлениями дает наиболее быстрый результат: поисковый бот получает сигнал о новой странице в течение секунд после публикации. На практике издания, использующие RSS с WebSub, фиксируют индексацию новых материалов в течение 2-6 часов против 24-72 часов для сайтов без ленты. Для SEO-стратегии это означает более раннее появление в результатах поиска по свежим запросам и меньшее отставание от конкурентов-СМИ.</p> </details> <details> <summary>Можно ли добавить UTM-метки в RSS для отслеживания в аналитике?</summary> <p>Да, и это нужно делать обязательно, иначе трафик из агрегаторов смешивается с прямыми заходами или неверно атрибутируется. Самый надежный способ — добавить UTM-параметры к ссылкам прямо в шаблоне ленты через фильтры CMS. В WordPress для этого используют плагины вроде RSS Footer или кастомный код в functions.php, который добавляет ?utm_source=rss&utm_medium=feed&utm_campaign=rss-feed ко всем ссылкам в ленте. Важно использовать одни и те же параметры последовательно, чтобы данные корректно агрегировались в Яндекс.Метрике или Google Analytics. Если использовать разные UTM-значения для разных агрегаторов (например, utm_source=feedly для Feedly и utm_source=yandex-news для Яндекса), можно точно увидеть, какой источник дает больше трафика и лучшее качество аудитории. Следует учесть, что некоторые агрегаторы (Feedly, Inoreader) отображают полный текст статьи без перехода на сайт — в этом случае UTM-переходы будут только от читателей, кликнувших по заголовку или ссылке внутри текста.</p> </details> </article> <section class="gl-related"> <h2 class="gl-related__title">Смотрите также</h2> <div class="gl-related__items"> <a class="gl-card" href="https://tolkadigital.ru/glossary/sip-telefoniya/"> <span class="gl-card__term">SIP-телефония</span> <span class="gl-card__announce">Технология передачи звонков через интернет. Основа современных виртуальных АТС и коллтрекинга.</span> </a> <a class="gl-card" href="https://tolkadigital.ru/glossary/obratnyy-otschet/"> <span class="gl-card__term">Обратный отсчет</span> <span class="gl-card__announce">Таймер на странице, показывающий время до конца акции. Создает срочность и подталкивает к действию.</span> </a> <a class="gl-card" href="https://tolkadigital.ru/glossary/front-end-razrabotka/"> <span class="gl-card__term">Front-end разработка</span> <span class="gl-card__announce">Разработка видимой части сайта - интерфейса, с которым взаимодействует пользователь: верстка и логика в браузере.</span> </a> <a class="gl-card" href="https://tolkadigital.ru/glossary/shablon-sayta/"> <span class="gl-card__term">Шаблон сайта</span> <span class="gl-card__announce">Готовый дизайн-макет с версткой, который наполняют своим контентом. Быстрый и недорогой способ запустить сайт.</span> </a> <a class="gl-card" href="https://tolkadigital.ru/glossary/glavnaya-stranica/"> <span class="gl-card__term">Главная страница</span> <span class="gl-card__announce">Стартовая страница сайта, его лицо и точка входа. Часто самая посещаемая и важная.</span> </a> <a class="gl-card" href="https://tolkadigital.ru/glossary/above-the-fold/"> <span class="gl-card__term">Above the fold</span> <span class="gl-card__announce">Верхняя часть страницы, видимая без прокрутки. Самая ценная зона для ключевого сообщения.</span> </a> </div> </section> <a class="ds-btn gl-single__back" href="https://tolkadigital.ru/glossary/">Все термины</a> </div> </div> </main> <footer class="footer"> <div class="container"> <div class="footer__row"> <div class="footer__logo"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/logo-white.svg" alt="logo"> </div> <div class="footer__work-hours"> <p> Режим работы: <br> ПН – ПТ 9:00 – 18:00 </p> </div> <div class="footer__requisites"> <p> ИП Половинкин Анатолий Иванович <br>ОГРНИП 318028000161485 <br>ИНН 025001963239 </p> </div> <div class="footer__contacts"> <a class="footer__contacts-phone" href="tel:+79374740037">+7 937 474 00-37</a> <a class="footer__contacts-email" href="mailto:tolkadigital@polovinkin.pro">tolkadigital@polovinkin.pro</a> </div> <div class="footer__socials"> <a class="footer__socials-link" href="https://vk.com/tolka_digitalmarketing" target="_blank" rel="noopener noreferrer"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/vk.webp" alt="VK"> </a> <a class="footer__socials-link" href="https://t.me/tolkadigital" target="_blank" rel="noopener noreferrer"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/tg.webp" alt="Telegram"> </a> </div> </div> <div class="footer__kp-wrapper"> <a href="#popup-consult" data-fancybox class="footer__kp-link"> Получить КП и обсудить проект </a> </div> </div> </footer> <div class="footer-docs"> <div class="container"> <p class="footer-docs__right-text"> Копирование элементов сайта запрещено. </p> <div class="footer-docs__links"> <a href="/privacy/" target="_blank" rel="noopener noreferrer">Политика конфиденциальности персональных данных</a> <a href="/private/" target="_blank" rel="noopener noreferrer">Закон РФ «Об авторском праве и смежных правах»</a> <a href="/yandex-policy/" target="_blank" rel="noopener noreferrer">Согласие на обработку данных метрическими программами (Яндекс.Метрика)</a> <a href="/protection-of-personal-data/" target="_blank" rel="noopener noreferrer">Положение об обработке и защите персональных данных</a> <a href="/receivingadvertising/" target="_blank" rel="noopener noreferrer">Согласие на получение рекламных и информационных рассылок</a> <a href="/personal-policy/" target="_blank" rel="noopener noreferrer">Политика обработки персональных данных</a> <a href="/management-regulations/" target="_blank" rel="noopener noreferrer">Регламент работы с персональными данными</a> <a href="/recommendation-technologies/" target="_blank" rel="noopener noreferrer">Документ об использовании рекомендательных технологий на сайте tolkadigital.ru</a> <a href="/consent-to-the-processing-of-personal-data/" target="_blank" rel="noopener noreferrer">Согласие на обработку персональных данных</a> </div> <div class="footer-docs__links" style="margin-top:10px;"> <a href="https://tolkadigital.ru/glossary/">Глоссарий digital-маркетинга</a> </div> </div> </div> <div class="popup popup-consult" id="popup-consult"> <p class="popup-consult__title"> Получите консультацию<br> для вашего бизнеса </p> <p class="popup-consult__desc"> Заполните форму ниже, и эксперт свяжется вами в ближайшее время </p> <form class="td-form td-popup__form" action="/wp-json/contact-form-7/v1/contact-forms/197/feedback" method="POST" enctype="multipart/form-data" novalidate> <input type="hidden" name="_wpcf7" value="197"> <input type="hidden" name="_wpcf7_version" value="5.9"> <input type="hidden" name="_wpcf7_locale" value="ru_RU"> <input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f197-o1"> <input type="hidden" name="_wpcf7_container_post" value="0"> <div class="td-form__field"> <label class="td-form__label">Как к вам обращаться</label> <input type="text" name="user_name" placeholder="Анатолий Иванович"> </div> <div class="td-form__field"> <label class="td-form__label">Как с вами лучше связаться?</label> <div class="contact-ways"> <button class="contact-ways__item" type="button" data-input-name="user_phone"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/contact-ways/phone.svg" alt="phone"> <span>Телефон</span> </button> <button class="contact-ways__item" type="button" data-input-name="user_telegram"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/contact-ways/telegram.svg" alt="telegram"> <span>Telegram</span> </button> <button class="contact-ways__item" type="button" data-input-name="user_whatsapp"> <img src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/images/contact-ways/whatsapp.svg" alt="whatsapp"> <span>WhatsApp</span> </button> </div> </div> <div class="td-form__field"> <input type="tel" name="user_phone" id="popup-phone" placeholder="(000) 000-00-00"> </div> <div class="td-form__field" style="display:none"> <input type="text" name="user_telegram" placeholder="Имя пользователя или телефон"> </div> <div class="td-form__field" style="display:none"> <input type="tel" name="user_whatsapp" class="phonemask" placeholder="Номер WhatsApp"> </div> <label class="form-agreement"> <input type="checkbox" name="form_agreement" id="popup-agreement"> <span class="indicator"></span> <span class="text">Я согласен на <a href="/personal-policy/" target="_blank">обработку персональных данных</a>, ознакомлен с <a href="/privacy/" target="_blank">Политикой конфиденциальности</a>, <a href="/personal-policy/" target="_blank">Политикой обработки персональных данных</a>, а также согласен на <a href="/receivingadvertising/" target="_blank">получение рекламных и информационных рассылок</a></span> </label> <button type="submit" class="td-form__submit td-popup__submit" disabled>Получить консультацию</button> <p class="td-form__response" hidden></p> </form> </div> <!-- Общий шаблон блока «Спасибо за заявку» — клонируется JS-ом на месте любой формы после успешной отправки --> <template id="td-thanks-tpl"> <div class="td-thanks"> <span class="td-thanks__icon" aria-hidden="true"> <svg width="34" height="34" viewBox="0 0 34 34" fill="none"><circle cx="17" cy="17" r="17" fill="#E98C6C"/><path d="M10 17.5L15 22.5L24 12" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg> </span> <h3 class="td-thanks__title">Спасибо за заявку!</h3> <p class="td-thanks__intro">Мы получили ваши контакты. Что будет дальше:</p> <ul class="td-thanks__steps"> <li>Свяжемся с вами выбранным способом в ближайшее время</li> <li>Обсудим вашу задачу и подберём решение</li> <li>Без воды и навязывания — только по делу</li> </ul> <a class="td-thanks__btn" href="https://t.me/+iMLntLfycko1NTYy" target="_blank" rel="noopener">Подписаться на Telegram</a> </div> </template> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/tolka-digital/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="wp-hooks-js" src="https://tolkadigital.ru/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script> <script id="wp-i18n-js" src="https://tolkadigital.ru/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script id="swv-js" src="https://tolkadigital.ru/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.6"></script> <script id="contact-form-7-js-translations"> ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2026-07-09 09:06:29+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);","lang":"ru"},"This contact form is placed in the wrong place.":["\u042d\u0442\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435."],"Error:":["\u041e\u0448\u0438\u0431\u043a\u0430:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); //# sourceURL=contact-form-7-js-translations </script> <script id="contact-form-7-js-before"> var wpcf7 = { "api": { "root": "https:\/\/tolkadigital.ru\/wp-json\/", "namespace": "contact-form-7\/v1" } }; //# sourceURL=contact-form-7-js-before </script> <script id="contact-form-7-js" src="https://tolkadigital.ru/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.6"></script> <script id="fancybox-js" src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script> <script id="lazysizes-js" src="https://cdn.jsdelivr.net/npm/lazysizes@5.3.2/lazysizes.min.js"></script> <script id="inputmask-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/vendor/inputmask.min.js"></script> <script id="tolka-digital-main-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/js/main.js?ver=2.2.10"></script> <script id="tolka-smartcaptcha-js-before"> window.TOLKA_SC_SITEKEY = 'ysc1_CT2OAfZruBOfZEkQPQhNQab6ePYwSRuG9va4Uts480a6de32'; (function () { var SITEKEY = window.TOLKA_SC_SITEKEY; if (!SITEKEY) { return; } // Один ОБЩИЙ невидимый виджет в body. Почему не по виджету на форму: // рендер SmartCaptcha в скрытый (display:none) контейнер - а попап-формы темы // скрыты на старте - подвешивает страницу. Общий виджет в видимом body этого лишен. // Токен виджета одноразовый и привязан к домену, а не к конкретной форме, поэтому // один виджет обслуживает все формы: по submit получаем токен и кладем в поле нужной формы. var sharedId = null; var pendingForm = null; // форма, ждущая токен var ready = new WeakMap(); // form -> токен вставлен, эту отправку пропускаем // Универсальный признак CF7-формы - скрытое поле _wpcf7 (а не класс .wpcf7): // ловит и штатные формы, и кастомные попапы темы (.td-form), шлющие fetch на CF7 REST. function isCf7Form(el) { return !!(el && el.tagName === 'FORM' && el.querySelector('input[name="_wpcf7"]')); } // Скрытое поле smart-token в самой форме (попадает в FormData при fetch-отправке). function tokenInput(form) { var inp = form.querySelector('input.tolka-sc-token'); if (!inp) { inp = document.createElement('input'); inp.type = 'hidden'; inp.name = 'smart-token'; inp.className = 'tolka-sc-token'; form.appendChild(inp); } return inp; } function resubmit(form) { if (form.requestSubmit) { form.requestSubmit(); } else { form.submit(); } } function initShared() { if (sharedId !== null || !window.smartCaptcha) { return; } var box = document.createElement('div'); box.className = 'tolka-sc'; // видимый контейнер в body (виджет невидимый, UI не рисует) document.body.appendChild(box); try { sharedId = window.smartCaptcha.render(box, { sitekey: SITEKEY, invisible: true, callback: function (token) { if (!pendingForm) { return; } var form = pendingForm; pendingForm = null; tokenInput(form).value = token || ''; ready.set(form, true); resubmit(form); } }); } catch (e) {} } // Перехват submit в фазе capture - раньше собственных обработчиков CF7 и темы. document.addEventListener('submit', function (e) { var form = e.target; if (!isCf7Form(form)) { return; } if (ready.get(form)) { ready.set(form, false); return; } // токен уже вставлен - пускаем дальше if (!window.smartCaptcha || sharedId === null) { return; } // капча не готова - не блокируем человека e.preventDefault(); e.stopImmediatePropagation(); pendingForm = form; try { window.smartCaptcha.reset(sharedId); window.smartCaptcha.execute(sharedId); } catch (err) { // капча не сработала на клиенте - не блокируем человека pendingForm = null; tokenInput(form).value = ''; ready.set(form, true); resubmit(form); } }, true); // После завершения отправки сбрасываем общий виджет (токен одноразовый). function resetShared() { try { if (sharedId !== null) { window.smartCaptcha.reset(sharedId); } } catch (x) {} pendingForm = null; } document.addEventListener('wpcf7mailsent', resetShared); document.addEventListener('wpcf7spam', resetShared); document.addEventListener('wpcf7invalid', resetShared); document.addEventListener('wpcf7mailfailed', resetShared); // Рендерим общий виджет ТОЛЬКО после полной загрузки страницы, чтобы iframes // капчи не задерживали событие load и не тормозили первичную отрисовку. function schedule() { if (document.readyState === 'complete') { initShared(); } else { window.addEventListener('load', function () { initShared(); }); } } window.tolkaScOnload = schedule; if (window.smartCaptcha) { schedule(); } })(); //# sourceURL=tolka-smartcaptcha-js-before </script> <script id="tolka-smartcaptcha-js" defer src="https://smartcaptcha.yandexcloud.net/captcha.js?render=onload&onload=tolkaScOnload"></script> <script id="tolka-analytics-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/js/analytics.js?ver=1786290284"></script> <script id="tolka-tracking-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/js/tracking.js?ver=1786387752"></script> <script id="intl-tel-input-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/vendor/intl-tel-input/js/intlTelInput.min.js"></script> <script id="tolka-phone-field-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/js/phone-field.js?ver=1.0.8"></script> <script id="tolka-popup-consult-js" src="https://tolkadigital.ru/wp-content/themes/tolka-digital/assets/js/popup-consult.js?ver=1.0.1"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://tolkadigital.ru/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}} </script> <script type="module"> /*! This file is auto-generated */ var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); //# sourceURL=https://tolkadigital.ru/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html>