Проверка мета-тегов сайта

0 из 0 оценок

Инструмент проверки мета‑тегов позволяет быстро получить информацию о метаданных любой веб‑страницы. Для этого достаточно ввести URL, и система загрузит HTML‑код страницы, извлекая из него содержимое тегов , <meta name="description">, <meta name="keywords">, а также теги Open Graph (og:title, og:description, og:image) и Twitter Card, если они присутствуют. Результат отображается в удобной таблице, что упрощает SEO‑аудит.</p><p>Помимо основных мета‑тегов, инструмент показывает заголовки H1, кодировку страницы, информацию о сервере и HTTP‑заголовки. Это помогает веб‑мастерам и маркетологам проверить, корректно ли заполнены метаданные для поисковых систем и соцсетей. Также можно увидеть, есть ли дубликаты заголовков или слишком длинные описания, которые могут быть обрезаны в выдаче.</p><p>Скрипт AltumCode обрабатывает даже страницы с редиректами, следуя до конечного URL. При ошибках загрузки (например, таймаут или недоступность сайта) выводится соответствующее сообщение. Инструмент полезен для регулярного мониторинга своего сайта и анализа конкурентов.</p> </div> </div> <div class="mt-5"> <h2 class="small font-weight-bold text-uppercase text-muted mb-3"><i class="fas fa-fw fa-sm fa-share-alt text-primary mr-1"></i> Поделиться</h2> <div class="card"> <div class="card-body"> <div class="d-flex align-items-center flex-wrap gap-3"> <button type="button" class="btn btn-gray-100 rounded-2x" style="color: #808080; background-color: rgba(128, 128, 128, 0.1);" data-toggle="tooltip" title="Копировать в буфер" onclick="navigator.clipboard.writeText('https://toolzen.ru/ru/meta-tags-checker')" data-tooltip-hide-on-click> <i class="fas fa-fw fa-sm fa-copy"></i> </button> <button type="button" class="btn btn-gray-100 rounded-2x d-none" style="color: #3a18f2; background-color: rgba(58, 24, 242, 0.1);" data-toggle="tooltip" title="Поделиться через Устройство" data-native-share> <i class="fas fa-fw fa-share"></i> </button> <a href="mailto:?body=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #3b5998; background-color: rgba(59, 89, 152, 0.1);" data-toggle="tooltip" title="Поделиться через Email"> <i class="fas fa-fw fa-envelope"></i> </a> <a href="https://www.facebook.com/sharer/sharer.php?u=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #1877F2; background-color: rgba(24, 119, 242, 0.1);" data-toggle="tooltip" title="Поделиться через Facebook"> <i class="fab fa-fw fa-facebook"></i> </a> <a href="https://www.threads.net/intent/post?text=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #808080; background-color: rgba(128, 128, 128, 0.1);" data-toggle="tooltip" title="Поделиться через Threads"> <i class="fab fa-fw fa-threads"></i> </a> <a href="https://x.com/share?url=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #1DA1F2; background-color: rgba(29, 161, 242, 0.1);" data-toggle="tooltip" title="Поделиться через X"> <i class="fab fa-fw fa-twitter"></i> </a> <a href="https://pinterest.com/pin/create/link/?url=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #E60023; background-color: rgba(230, 0, 35, 0.1);" data-toggle="tooltip" title="Поделиться через Pinterest"> <i class="fab fa-fw fa-pinterest"></i> </a> <a href="https://linkedin.com/shareArticle?url=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #0077B5; background-color: rgba(0, 119, 181, 0.1);" data-toggle="tooltip" title="Поделиться через LinkedIn"> <i class="fab fa-fw fa-linkedin"></i> </a> <a href="https://www.reddit.com/submit?url=https://toolzen.ru/ru/meta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #FF4500; background-color: rgba(255, 69, 0, 0.1);" data-toggle="tooltip" title="Поделиться через Reddit"> <i class="fab fa-fw fa-reddit"></i> </a> <a href="https://wa.me/?text=https://toolzen.ru/ru/meta-tags-checker" class="btn btn-gray-100 rounded-2x" style="color: #25D366; background-color: rgba(37, 211, 102, 0.1);" data-toggle="tooltip" title="Поделиться через Whatsapp"> <i class="fab fa-fw fa-whatsapp"></i> </a> <a href="https://t.me/share/url?url=https://toolzen.ru/ru/meta-tags-checker" class="btn btn-gray-100 rounded-2x" style="color: #0088cc; background-color: rgba(0, 136, 204, 0.1);" data-toggle="tooltip" title="Поделиться через Telegram"> <i class="fab fa-fw fa-telegram"></i> </a> <a href="https://www.snapchat.com/scan?attachmentUrl=https://toolzen.ru/ru/meta-tags-checker" class="btn btn-gray-100 rounded-2x" style="color: #FFB700; background-color: rgba(255, 183, 0, 0.1);" data-toggle="tooltip" title="Поделиться через Snapchat"> <i class="fab fa-fw fa-snapchat"></i> </a> <a href="https://teams.microsoft.com/share?href=https%3A%2F%2Ftoolzen.ru%2Fru%2Fmeta-tags-checker" target="_blank" class="btn btn-gray-100 rounded-2x" style="color: #464EB8; background-color: rgba(70, 78, 184, 0.1);" data-toggle="tooltip" title="Поделиться через Microsoft Teams"> <i class="fab fa-fw fa-microsoft"></i> </a> </div> </div> </div> </div> <div class="mt-5"> <h2 class="small font-weight-bold text-uppercase text-muted mb-3"><i class="fas fa-fw fa-sm fa-star text-primary mr-1"></i> Популярные инструменты</h2> <div class="row m-n3" id="popular_tools"> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="ip_lookup" data-tool-name="IP-запрос" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fas fa-search-location fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/ip-lookup" class="stretched-link text-decoration-none text-dark" > <strong>IP-запрос</strong> </a> <p class="text-truncate text-muted small m-0">Получите приблизительную информацию об IP-адресе.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 673 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 3 </div> </div> </div> </div> </div> </div> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="seconds_to_days" data-tool-name="Секунды (с) → Дни (дн)" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fas fa-clock fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/seconds-to-days" class="stretched-link text-decoration-none text-dark" > <strong>Секунды (с) → Дни (дн)</strong> </a> <p class="text-truncate text-muted small m-0">Переводите Секунды (с) в Дни (дн) быстро и точно с нашим конвертером.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 667 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 2 </div> </div> </div> </div> </div> </div> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="html_entity_converter" data-tool-name="Конвертер HTML-сущностей" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fas fa-file-code fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/html-entity-converter" class="stretched-link text-decoration-none text-dark" > <strong>Конвертер HTML-сущностей</strong> </a> <p class="text-truncate text-muted small m-0">Кодируйте или декодируйте HTML-сущности для любого ввода.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 638 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 0 </div> </div> </div> </div> </div> </div> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="html_minifier" data-tool-name="Минификатор HTML" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fab fa-html5 fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/html-minifier" class="stretched-link text-decoration-none text-dark" > <strong>Минификатор HTML</strong> </a> <p class="text-truncate text-muted small m-0">Сожмите HTML-код, удалив лишние пробелы и комментарии.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 617 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 0 </div> </div> </div> </div> </div> </div> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="js_minifier" data-tool-name="Минификатор JavaScript" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fab fa-js fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/js-minifier" class="stretched-link text-decoration-none text-dark" > <strong>Минификатор JavaScript</strong> </a> <p class="text-truncate text-muted small m-0">Сожмите JS-код, удалив лишние пробелы и комментарии.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 603 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 0 </div> </div> </div> </div> </div> </div> <div class="col-12 col-md-6 col-lg-4 p-3 position-relative" data-tool-id="reverse_ip_lookup" data-tool-name="Обратный IP-запрос" data-tool-category="" > <div class="card d-flex flex-column h-100 overflow-hidden" " > <div class="card-body text-truncate"> <div class="bg-primary-100 d-flex align-items-center justify-content-center rounded tool-icon mb-2" > <i class="fas fa-book fa-fw text-primary-600" ></i> </div> <a href="https://toolzen.ru/ru/reverse-ip-lookup" class="stretched-link text-decoration-none text-dark" > <strong>Обратный IP-запрос</strong> </a> <p class="text-truncate text-muted small m-0">Узнайте, какие домены привязаны к указанному IP-адресу.</p> <div class="mt-3 row"> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего просмотров"> <i class="fas fa-fw fa-sm fa-eye mr-1"></i> 602 </div> </div> <div class="col px-3"> <div class="badge badge-gray-100 w-100" data-toggle="tooltip" title="Всего запросов"> <i class="fas fa-fw fa-sm fa-check mr-1"></i> 3 </div> </div> </div> </div> </div> </div> </div> </div> </div> </main> <div class="container my-3 d-print-none"><center><a target="_new" href="https://timeweb.com/ru/?i=49168&a=235"><img style="border:0px;" src="https://wm.timeweb.ru/images/posters/970x250/970x250-2.jpg"></a></center></div> <div class="container d-print-none"> <footer class="app-footer"> <div class="d-flex flex-column flex-lg-row justify-content-between mb-4"> <div class="mb-3 mb-lg-0"> <a class="h5 footer-heading" href="https://toolzen.ru/ru/" data-logo data-light-value="TOOLZEN" data-light-class="mb-2" data-light-tag="span" data-dark-value="TOOLZEN" data-dark-class="mb-2" data-dark-tag="span" > <span class="mb-2">TOOLZEN</span> </a> <div class="text-muted font-size-little-small mt-1">Авторское право © 2026 TOOLZEN.</div> <div class="d-flex flex-wrap mt-3 gap-3"> </div> </div> <div class="d-flex flex-row flex-truncate"> <div class="dropdown mr-3 ml-lg-3 mr-lg-0"> <button type="button" class="btn btn-link text-decoration-none p-0" id="language_switch" data-tooltip data-tooltip-hide-on-click title="Выберите язык" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fas fa-fw fa-sm fa-language"></i> </button> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="language_switch"> <a href="https://toolzen.ru/ru/meta-tags-checker" class="dropdown-item" data-set-language="russian"> <i class="fas fa-fw fa-sm fa-check mr-2 text-success"></i> russian </a> <a href="https://toolzen.ru/en/meta-tags-checker" class="dropdown-item" data-set-language="english"> <span class="mr-2">🇺🇸</span> english </a> </div> </div> <div class="mr-3 ml-lg-3 mr-lg-0"> <button type="button" id="switch_theme_style" class="btn btn-link text-decoration-none p-0" data-toggle="tooltip" title="Переключить на Тёмная (CMD/CTRL + I)" aria-label="Переключить на Тёмная (CMD/CTRL + I)" data-title-theme-style-light="Переключить на Светлая (CMD/CTRL + I)" data-title-theme-style-dark="Переключить на Тёмная (CMD/CTRL + I)"> <span data-theme-style="light" class=""><i class="fas fa-fw fa-sm fa-sun text-warning"></i></span> <span data-theme-style="dark" class="d-none"><i class="fas fa-fw fa-sm fa-moon"></i></span> </button> </div> </div> </div> <div class="row"> <div class="col-12 col-lg mb-3 mb-lg-0"> <ul class="list-style-none d-flex flex-column flex-lg-row flex-wrap m-0"> <li class="mb-2 mr-lg-3"><a href="https://toolzen.ru/ru/blog">Блог</a></li> <li class="mb-2 mr-lg-3"><a href="#" data-cc="show-preferencesModal">Cookies</a></li> </ul> </div> </div> </footer> </div> <input type="hidden" name="global_site_url" value="https://toolzen.ru/" /> <input type="hidden" name="global_url" value="https://toolzen.ru/ru/" /> <input type="hidden" name="global_token" value="62e35366f7b2e773097f9b232e4c50ae40dd65fbd6ea4c555b0ba69d499f2b17" /> <input type="hidden" name="global_number_decimal_point" value="," /> <input type="hidden" name="global_number_thousands_separator" value=" " /> <script> 'use strict'; /* Some global variables */ window.altum = {}; let global_token = document.querySelector('input[name="global_token"]').value; let site_url = document.querySelector('input[name="global_site_url"]').value; let url = document.querySelector('input[name="global_url"]').value; let decimal_point = document.querySelector('[name="global_number_decimal_point"]').value; let thousands_separator = document.querySelector('[name="global_number_thousands_separator"]').value; </script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/jquery.slim.min.js?v=4400"></script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/popper.min.js?v=4400"></script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/bootstrap.min.js?v=4400"></script> <script src="https://toolzen.ru/themes/altum/assets/js/custom.min.js?v=4400"></script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/fontawesome.min.js?v=4400" defer></script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/fontawesome-solid.min.js?v=4400" defer></script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/fontawesome-brands.modified.js?v=4400" defer></script> <script> 'use strict' let current_rating = localStorage.getItem('6ac010331ea9510bb9dbd22327d5055d_meta_tags_checker_rating'); if(current_rating) { document.querySelector(`[data-rating="${current_rating}"]`).classList.add('rating-star-chosen'); } document.querySelectorAll('[data-rating]').forEach(star => { star.addEventListener('click', async event => { let cooldown_ms = 5000; /* 5 second cooldown */ let last_rating_time = parseInt(localStorage.getItem('6ac010331ea9510bb9dbd22327d5055d_meta_tags_checker_rating_time') || '0', 10); let now = Date.now(); /* Block if user is within cooldown */ if(now - last_rating_time < cooldown_ms) { return; } localStorage.setItem('6ac010331ea9510bb9dbd22327d5055d_meta_tags_checker_rating_time', now); let element = event.currentTarget; let rating = element.getAttribute('data-rating'); let tool_id = "meta_tags_checker"; /* Prepare form data */ let form = new FormData(); form.set('global_token', global_token) form.set('tool_id', tool_id); form.set('rating', rating); const response = await fetch(`${url}tools-rating`, { method: 'post', body: form }); let data = null; try { data = await response.json(); } catch (error) {} if(!response.ok) {} if(data.status == 'error') { } else if(data.status == 'success') { localStorage.setItem('6ac010331ea9510bb9dbd22327d5055d_meta_tags_checker_rating', rating); /* Remove previous chosen star if needed */ let chosen_rating = document.querySelector('.rating-star-chosen'); if(chosen_rating) { chosen_rating.classList.remove('rating-star-chosen'); } /* Add class to show that it has been rated */ element.classList.add('rating-star-chosen'); /* Update ratings and avg */ document.querySelector('#average-rating').textContent = data.details.new_average_rating; document.querySelector('#total-ratings').textContent = data.details.new_total_ratings; } }); }); </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Проверка мета-тегов сайта – Онлайн-инструменты", "url": "https://toolzen.ru/ru/meta-tags-checker", "applicationCategory": "WebApplication" } </script> <script> 'use strict'; document.querySelectorAll('[data-native-share]').forEach(element => { if(navigator.share) { element.classList.remove('d-none'); element.addEventListener('click', event => { navigator.share({ title: document.title, url: "https://toolzen.ru/ru/meta-tags-checker" }).catch(error => {}); }) } }) </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Онлайн-инструменты для веб-мастеров", "item": "https://toolzen.ru/ru/" }, { "@type": "ListItem", "position": 2, "name": "Проверка мета-тегов сайта – Онлайн-инструменты", "item": "https://toolzen.ru/ru/meta-tags-checker" } ] } </script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/clipboard.min.js?v=4400"></script> <script> 'use strict'; /* Simple copy */ let data_copy_elements = document.querySelectorAll('[data-copy=""]'); if(data_copy_elements.length) { data_copy_elements.forEach(element => { element.classList.add('cursor-pointer'); element.setAttribute('data-toggle', 'tooltip'); element.setAttribute('title', "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440"); element.setAttribute('data-clipboard-text', element.innerText.trim()); element.setAttribute('data-copy', "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440"); element.setAttribute('data-copied', "\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e!"); }); tooltips_initiate(); } let clipboard = new ClipboardJS('[data-clipboard-text],[data-clipboard-target]'); /* Copy full url handler */ $('[data-clipboard-text],[data-clipboard-target]').on('click', event => { let copy = event.currentTarget.dataset.copy; let copied = event.currentTarget.dataset.copied; $(event.currentTarget).attr('data-original-title', copied).tooltip('show'); setTimeout(() => { $(event.currentTarget).attr('data-original-title', copy); }, 500); }); </script> <script> 'use strict'; document.querySelectorAll('[data-set-language]').forEach(element => element.addEventListener('click', event => { let language = event.currentTarget.getAttribute('data-set-language'); set_cookie(`set_language`, language, 90, "\/"); })); </script> <script> 'use strict'; let switch_theme_style = document.querySelector('#switch_theme_style'); if(switch_theme_style) { switch_theme_style.addEventListener('click', event => { let theme_style = document.querySelector('body[data-theme-style]').getAttribute('data-theme-style'); let new_theme_style = theme_style == 'light' ? 'dark' : 'light'; /* Set a cookie with the new theme style */ set_cookie(`theme_style`, new_theme_style, 90, "\/"); /* Change the css and button on the page */ let css = document.querySelector(`#css_theme_style`); document.querySelector(`body[data-theme-style]`).setAttribute('data-theme-style', new_theme_style); switch (new_theme_style) { case 'dark': css.setAttribute('href', "https:\/\/toolzen.ru\/themes\/altum\/assets\/css\/bootstrap-dark.min.css?v=4400"); document.body.classList.add('cc--darkmode'); break; case 'light': css.setAttribute('href', "https:\/\/toolzen.ru\/themes\/altum\/assets\/css\/bootstrap.min.css?v=4400"); document.body.classList.remove('cc--darkmode'); break; } /* Refresh the logo/title */ document.querySelectorAll('[data-logo]').forEach(element => { let new_brand_value = element.getAttribute(`data-${new_theme_style}-value`); let new_brand_class = element.getAttribute(`data-${new_theme_style}-class`); let new_brand_tag = element.getAttribute(`data-${new_theme_style}-tag`) let new_brand_html = new_brand_tag == 'img' ? `<img src="${new_brand_value}" class="${new_brand_class}" alt="Логотип сайта" />` : `<${new_brand_tag} class="${new_brand_class}">${new_brand_value}</${new_brand_tag}>`; element.innerHTML = new_brand_html; }); document.querySelector(`#switch_theme_style`).setAttribute('data-original-title', document.querySelector(`#switch_theme_style`).getAttribute(`data-title-theme-style-${theme_style}`)); document.querySelector(`#switch_theme_style [data-theme-style="${new_theme_style}"]`).classList.remove('d-none'); document.querySelector(`#switch_theme_style [data-theme-style="${theme_style}"]`).classList.add('d-none'); if (typeof bootstrap !== 'undefined' && typeof bootstrap.Tooltip === 'function' && typeof Popper !== 'undefined') { $(`#switch_theme_style`).tooltip('hide').tooltip('show'); } event.preventDefault(); }); document.addEventListener('keydown', event => { if((event.ctrlKey || event.metaKey) && event.key === 'i') { event.preventDefault(); switch_theme_style.click(); if (typeof bootstrap !== 'undefined' && typeof bootstrap.Tooltip === 'function' && typeof Popper !== 'undefined') { $(`#switch_theme_style`).tooltip('hide'); } } }); } </script> <script src="https://toolzen.ru/themes/altum/assets/js/libraries/cookieconsent.js?v=4400"></script> <link href="https://toolzen.ru/themes/altum/assets/css/libraries/cookieconsent.css?v=4400" rel="stylesheet" media="screen"> <style> :root { --cc-font-family: inherit; --cc-bg: hsla(0, 0%, 100%, 90%); --cc-separator-border-color: transparent; --cc-modal-border-radius: var(--border-radius); --cc-btn-border-radius: var(--border-radius); --cc-primary-color:var(--gray-700); --cc-secondary-color:var(--gray-600); --cc-btn-primary-color: var(--white); --cc-btn-primary-bg: var(--primary); --cc-btn-primary-hover-bg: var(--primary-600); --cc-btn-primary-color-bg: var(--white); --cc-btn-primary-hover-color: var(--white); --cc-btn-secondary-bg:var(--gray-300); --cc-btn-secondary-hover-bg:var(--gray-400); --cc-btn-secondary-hover-color: var(--black); --cc-btn-secondary-hover-border-color: var(--cc-btn-secondary-hover-bg); } .cc--darkmode { --cc-bg: hsla(0, 0%, 0%, 90%); --cc-separator-border-color: transparent; } </style> <script> 'use strict'; window.addEventListener('load', () => { let language_code = document.documentElement.getAttribute('lang'); let language_direction = document.documentElement.getAttribute('dir'); let translations = {}; translations[language_code] = { consentModal: { title: "\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0443\u043a\u0438 \ud83c\udf6a", description: "\u042d\u0442\u043e\u0442 \u0441\u0430\u0439\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f.", acceptAllBtn: "\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0441\u0435", acceptNecessaryBtn: "\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c \u0432\u0441\u0435", showPreferencesBtn: "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c", }, preferencesModal: { title: "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0443\u043a\u0438", acceptAllBtn: "\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0441\u0435", acceptNecessaryBtn: "\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c \u0432\u0441\u0435", savePreferencesBtn: "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", closeIconLabel: "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", sections: [ { title: "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0443\u043a\u0438 \ud83d\udce2", description: "\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0443\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0430\u0439\u0442\u0430 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u043f\u044b\u0442\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043a\u0443\u043a\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"\" class=\"cc-link\">\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a>." }, { title: "\u0421\u0442\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u0443\u043a\u0438", description: "\u042d\u0442\u0438 \u043a\u0443\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0430\u0439\u0442\u0430. \u0411\u0435\u0437 \u043d\u0438\u0445 \u0441\u0430\u0439\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.", linkedCategory: 'necessary' }, { title: "\u041a\u0443\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438", description: "\u042d\u0442\u0438 \u043a\u0443\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u0430\u0439\u0442\u0443 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u043e\u0440\u044b.", linkedCategory: 'analytics' }, { title: "\u0420\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0435 \u0438 \u0442\u0430\u0440\u0433\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u0443\u043a\u0438", description: "\u042d\u0442\u0438 \u043a\u0443\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0441\u0430\u0439\u0442: \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u0442\u0435, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442\u0435. \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u043d\u043e\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.", linkedCategory: 'targeting' }, ] } }; CookieConsent.run({ categories: { necessary: { enabled: true, readOnly: true, }, analytics: {}, targeting: {}, }, language: { rtl: language_direction == 'rtl' ? language_code : null, default: language_code, autoDetect: 'document', translations }, onFirstConsent: () => { const preferences = CookieConsent.getUserPreferences(); window.dispatchEvent(new CustomEvent('cookie_consent_update', { detail: { accepted_categories: preferences.acceptedCategories } })); }, onChange: () => { const preferences = CookieConsent.getUserPreferences(); window.dispatchEvent(new CustomEvent('cookie_consent_update', { detail: { accepted_categories: preferences.acceptedCategories } })); }, guiOptions: { consentModal: { layout: "bar", position: "middle center", flipButtons: false }, preferencesModal: { layout: 'box', } }, }); }); </script> <script> 'use strict'; let ads_url = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'; let request_ads_to_display = callback => { let xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if(xhr.readyState == XMLHttpRequest.DONE) { callback(xhr.status === 0 || xhr.responseURL !== ads_url); } }; xhr.open('HEAD', ads_url, true); xhr.send(null); } request_ads_to_display(is_blocked => { if(is_blocked) { setTimeout(() => { $('#ad_blocker_detector_modal').modal('show'); }, 1 * 1000); } }); </script> <script> 'use strict'; /* DOM Elements & Data Storage */ const spotlight_wrapper = document.getElementById('spotlight_wrapper'); const spotlight_modal = document.querySelector('.spotlight-modal'); const spotlight_results = document.querySelector('#spotlight_results'); let spotlight_results_array = []; /* Show / Hide Spotlight */ const spotlight_display = () => { spotlight_wrapper.classList.remove('d-none'); requestAnimationFrame(() => { spotlight_wrapper.classList.add('show'); }); spotlight_wrapper.setAttribute('aria-hidden', 'false'); document.querySelector('#spotlight_search').focus(); }; const spotlight_hide = () => { spotlight_wrapper.classList.remove('show'); spotlight_wrapper.setAttribute('aria-hidden', 'true'); setTimeout(() => { spotlight_wrapper.classList.add('d-none'); }, 150); }; /* Fetch Pages & Store Locally */ const spotlight_get_pages = async () => { const form = new FormData(document.querySelector('#spotlight_form')); const params = new URLSearchParams(form).toString(); const response = await fetch(`${url}spotlight?global_token=${global_token}`, { method: 'get' }); let data; try { data = await response.json(); } catch (error) { return false; } if(!response.ok || data.status === 'error') { return false; } else { let results = data.details.map(obj => ({ ...obj, clicks: 0 })); localStorage.setItem('6ac010331ea9510bb9dbd22327d5055d_spotlight_results', JSON.stringify(results)); } return data.details; }; /* Build & Insert All Results Once */ const build_all_spotlight_results = (pages) => { /* Sort them once by clicks (descending) */ pages.sort((a, b) => b.clicks - a.clicks); /* Build in one shot */ let html = ''; for (const page of pages) { /* Include lowercase name/url as data attrs for quick toggling */ html += ` <a href="${url}${page.url || ''}" target="_blank" class="my-3 p-3 bg-gray-50 rounded-2x position-relative text-decoration-none text-reset" style="display: block" data-spotlight-result-url="${page.url}" data-spotlight-result-name="${page.name}" > <div class="d-flex justify-content-between align-items-center"> <div> <span>${page.name}</span> <div class="small text-muted">${page.url ? '/' + page.url : url}</div> </div> <div> <i class="fas fa-fw fa-lg fa-arrow-right text-muted"></i> </div> </div> </a> `; } spotlight_results.innerHTML = html; document.querySelector('#spotlight_no_data').style.display = pages.length ? 'none' : 'block'; }; /* Toggle Display Instead of Re-rendering */ const filter_spotlight_results = (search_value) => { const spotlight_no_data = document.querySelector('#spotlight_no_data'); const lower_search = search_value.toLowerCase(); const links = spotlight_results.querySelectorAll('a[data-spotlight-result-url]'); let matches = 0; links.forEach(link => { const page_name = link.getAttribute('data-spotlight-result-name').toLowerCase(); const page_url = link.getAttribute('data-spotlight-result-url').toLowerCase(); if(page_name.includes(lower_search) || page_url.includes(lower_search)) { link.style.display = 'block'; matches++; } else { link.style.display = 'none'; } }); /* If no matches, show #spotlight_no_data */ spotlight_no_data.style.display = matches ? 'none' : 'block'; }; /* Initial Load */ const spotlight_init = async () => { /* Show spinner only once, on load */ spotlight_results.innerHTML = ` <div class="my-3 p-3 bg-gray-50 rounded-2x position-relative d-flex justify-content-center"> <div class="spinner-border spinner-border-lg" role="status"></div> </div> `; /* If no local results, fetch from server */ if(!get_cookie('spotlight_has_results')) { localStorage.removeItem('6ac010331ea9510bb9dbd22327d5055d_spotlight_results'); } if(!localStorage.getItem('6ac010331ea9510bb9dbd22327d5055d_spotlight_results')) { const fetched_pages = await spotlight_get_pages(); spotlight_results_array = fetched_pages || []; } else { spotlight_results_array = JSON.parse(localStorage.getItem('6ac010331ea9510bb9dbd22327d5055d_spotlight_results')); } set_cookie('spotlight_has_results', 1, 90, "\/"); /* Now build the entire set */ build_all_spotlight_results(spotlight_results_array); /* Optional: highlight first result if you want */ const first_link = spotlight_results.querySelector('a'); if(first_link) { first_link.dispatchEvent(new Event('mouseover', { bubbles: true })); } }; /* Debounced Search on Input */ let search_timeout; const spotlight_process_search = () => { if(search_timeout) clearTimeout(search_timeout); search_timeout = setTimeout(() => { const search = document.querySelector('#spotlight_search').value; filter_spotlight_results(search); }, 100); }; /* Track Clicks via Delegation */ spotlight_results.addEventListener('click', event => { const link = event.target.closest('a[data-spotlight-result-url]'); if(!link) return; const result_url = link.getAttribute('data-spotlight-result-url'); const page_obj = spotlight_results_array.find(p => p.url === result_url); if(page_obj) { page_obj.clicks += 1; localStorage.setItem('6ac010331ea9510bb9dbd22327d5055d_spotlight_results', JSON.stringify(spotlight_results_array)); } }); /* Keyboard Navigation */ const navigate_results = direction => { /* Only get visible links */ const focusable_results = Array .from(spotlight_results.querySelectorAll('a')) .filter(a => a.style.display !== 'none'); if(!focusable_results.length) return; /* Where is the current focus? */ let current_index = focusable_results.indexOf(document.activeElement); /* If nothing is focused yet, treat it as -1 */ if(current_index === -1) current_index = -1; /* Move up or down among only visible items */ if(direction === 'down') { current_index = (current_index + 1) % focusable_results.length; } else if(direction === 'up') { current_index = (current_index - 1 + focusable_results.length) % focusable_results.length; } focusable_results[current_index].focus(); }; /* Global Keydown for CTRL+K, etc. */ document.addEventListener('keydown', event => { if((event.ctrlKey || event.metaKey) && event.key === 'k') { event.preventDefault(); spotlight_wrapper.getAttribute('aria-hidden') === 'true' ? spotlight_display() : spotlight_hide(); } if(spotlight_wrapper.getAttribute('aria-hidden') === 'false') { if(event.key === 'Escape') { spotlight_hide(); } else if(event.key === 'ArrowDown') { event.preventDefault(); navigate_results('down'); } else if(event.key === 'ArrowUp') { event.preventDefault(); navigate_results('up'); } else if(event.key === 'Enter') { /* handle enter if needed */ } else { document.querySelector('#spotlight_search').focus(); } } }); /* Hide on Click Outside */ spotlight_wrapper.addEventListener('click', event => { if(!spotlight_wrapper.classList.contains('d-none') && !spotlight_modal.contains(event.target)) { spotlight_hide(); } }); /* Attach Debounced Search */ document.querySelector('#spotlight_search').addEventListener('input', spotlight_process_search); /* Submit Form -> Go to First Result */ document.querySelector('#spotlight_form').addEventListener('submit', event => { event.preventDefault(); const first_visible = Array .from(document.querySelectorAll('#spotlight_results a')) .find(a => a.style.display !== 'none'); if(first_visible) { first_visible.click(); } }); /* Kick off initial load */ (async () => { await spotlight_init(); })(); </script> <style> /* Spotlight search */ .spotlight-wrapper { background: hsla(0, 100%, 100%, 0.5); position: fixed; width: 100%; height: 100%; z-index: 200; display: flex; justify-content: center; align-items: center; opacity: 0; transition: opacity .15s; pointer-events: none; } [data-theme-style="dark"] .spotlight-wrapper { background: hsla(0, 100%, 0%, 0.5); } .spotlight-wrapper.show { opacity: 1; pointer-events: auto; } .spotlight-modal { padding: 2rem; border-radius: calc(2*var(--border-radius)); background: var(--gray-100); } .spotlight-results { overflow-y: scroll; max-height: 29rem; } .spotlight-results a { border-radius: calc(2*var(--border-radius)); } .spotlight-results a:focus-visible { outline: none; } </style> </body> </html>