Попробовать
Назад

Как проверить мета-теги для списка URL (и что делать, если не получается)

Обобщите эту статью с помощью предпочитаемого вами AI
Попробуйте наши премиум-прокси

Протестируйте наши премиум-прокси без ограничений по качеству.

  • Мобильные и резидентные прокси
  • Таргетинг на уровне ZIP
  • Статические и ротируемые IP
  • Встроенный фильтр качества
Попробовать сейчас

Чтобы прочитать мета-теги одной страницы, достаточно правого клика. Проверка мета-тегов по списку URL - совсем другая задача, и есть четыре практичных способа это сделать.

  • Массовая проверка в браузере. Вставьте список, изучите результаты, экспортируйте CSV. Никакой настройки вообще.
  • Десктопный краулер например Screaming Frog или Sitebulb. Он создан для того, чтобы находить URL по всему сайту, а не проверять те, которые у вас уже есть.
  • Скрипт на Python. Никаких ограничений по количеству URL, полный контроль над каждым полем и скрапер, за которым теперь придётся следить вам.
  • Формулы в таблицах. IMPORTXML в Google Sheets: бесплатно и привычно, ровно до того момента, когда страницы перестают отвечать.

Каждый способ выигрывает в своей ситуации и ломается по-своему. Ниже мы разберём все четыре, с сильными сторонами и ограничениями каждого, но сначала коротко посмотрим, что именно вы собираете.

Что находится в <head>

Всё это берётся из одного места: из HTML <head> публичной страницы. Вот поля, которые стоит собирать.

ПолеЗа что отвечаетЧастая проблема
<title>Заголовок в результатах поиска и во вкладках браузераОтсутствует, дублируется или обрезается после ~60 символов
meta descriptionТекст сниппета под результатом поискаОтсутствует или написан для другой страницы
link rel="canonical"Указывает предпочтительную версию страницыВедёт на неверный URL после миграции
meta robotsДирективы индексации и сканированияСлучайный noindex оставшийся со стадии стейджинга
og:title, og:description, og:imageЧто показывают Facebook и LinkedInНет изображения, поэтому карточка репоста отображается серой
twitter:card, twitter:titleЧто показывает XПри отсутствии подставляется Open Graph, иногда некорректно
hreflangСопоставляет языковые и региональные версииОтсутствуют обратные теги или ошибки самоссылки
JSON-LD <script>Структурированные данные для расширенных результатовКорректный синтаксис, но описан не тот объект

Любое из этих значений легко проверить вручную. Проблема в объёме, и она усугубляется, когда часть страниц отказывается отвечать.

Четыре способа проверить мета-теги по списку URL

1. Браузерный массовый чекер

Вставьте свой список, запустите проверку, посмотрите результаты. Чекер мета-тегов от NodeMaven обрабатывает до 50 URL за один запуск.

Он возвращает title, description, canonical, директивы robots, типы схем, данные Open Graph и Twitter Card, а также живые превью того, как каждая ссылка выглядит в Google, Facebook, X и LinkedIn. Результаты экспортируются в CSV, и вы можете скопировать как отдельный тег, так и весь head страницы.

Начать стоит именно с этого, потому что здесь нечего устанавливать и нечего поддерживать. Для QA-проверки перед запуском, выборочной проверки после миграции или сравнения с конкурентами затраты на настройку любого другого метода будут больше, чем сама задача.

Где заканчиваются возможности: 50 URL за один запуск, нет публичного API, нет обнаружения страниц сайта. Список предоставляете вы, сам инструмент его искать не будет.

Бесплатный Meta Checker от Nodemaven

2. Десктопный краулер

Screaming Frog и Sitebulb решают другую задачу. Они стартуют с домена и обнаруживают URL, переходя по ссылкам, а это именно то, что нужно для полного технического аудита сайта, который вы видите впервые.

Этот же этап обнаружения делает их неподходящими для готового списка. Устанавливать краулер, настраивать его и ждать окончания обхода только ради проверки тридцати URL, которые уже лежат в таблице, - работа, не дающая ничего.

Бесплатный тариф Screaming Frog ограничен 500 URL. Лицензия по текущим ценам стоит около $259 в год.

Где заканчиваются возможности: тяжеловесно для небольших задач, только для десктопа, а бесплатный лимит на реальном сайте исчерпывается очень быстро.

3. Python

Двадцать строк дают вам воспроизводимый скрипт без ограничения по количеству URL:

python

import csv, httpx
from selectolax.parser import HTMLParser

def get_meta(url):
    r = httpx.get(url, follow_redirects=True, timeout=15,
                  headers={"User-Agent": "Mozilla/5.0"})
    tree = HTMLParser(r.text)

    def attr(selector, name="content"):
        node = tree.css_first(selector)
        return node.attributes.get(name, "") if node else ""

    title = tree.css_first("title")
    return {
        "url": url,
        "final_url": str(r.url),
        "status": r.status_code,
        "title": title.text() if title else "",
        "description": attr('meta[name="description"]'),
        "canonical": attr('link[rel="canonical"]', "href"),
        "robots": attr('meta[name="robots"]'),
        "og_title": attr('meta[property="og:title"]'),
        "og_image": attr('meta[property="og:image"]'),
    }

with open("urls.txt") as f:
    rows = [get_meta(line.strip()) for line in f if line.strip()]

with open("meta.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=rows[0].keys())
    writer.writeheader()
    writer.writerows(rows)

Обратите внимание на final_url поле. Фиксация того, куда запрос попал на самом деле, стоит одной строки и отлавливает целый класс незаметных ошибок, о которых пойдет речь в следующем разделе.

Это верное решение, когда проверка должна выполняться по расписанию, передавать данные в другую систему или охватывать тысячи URL.

Где заканчиваются возможности: теперь у вас есть собственный скрапер. Все описанные ниже сценарии сбоев становятся вашей заботой, начиная с того, что этот скрипт видит только HTML, который отдает сервер, и ничего из того, что браузер достроил бы потом.

4. Формулы в таблицах

Google Sheets справится с этим вообще без каких-либо инструментов. Поместите URL в столбец A и:

=IMPORTXML(A2, "//title")
=IMPORTXML(A2, "//meta[@name='description']/@content")
=IMPORTXML(A2, "//link[@rel='canonical']/@href")

Бесплатно, привычно и вполне пригодно для десяти URL.

Где заканчиваются возможности: IMPORTXML получает исходный HTML, поэтому все, что отрисовывается через JavaScript, вернется пустым. Кроме того, Sheets агрессивно ограничивает частоту запросов, и столбец из пятидесяти пересчитывающихся формул начнет выдавать #N/A сам по себе. Кода статуса нет, поэтому заблокированная страница и страница без заголовка выглядят одинаково.

Какой метод для какой задачи подходит

МетодНастройкаURL limitВидит JS-контентОбходит блокировкиЭкспорт
Браузерный чекерНет50 за запускДа, в режиме браузераBuilt inCSV
Десктопный краулерУстановка + настройка500 freeПри включённом рендерингеРучная настройкаCSV, Excel
ПитонНаписание + поддержкаНетТолько с headless-браузеромРеализуете самиAnything
Формулы в SheetsНет~10 на практикеНетНетNative

Почему массовые проверки метаданных дают неверный результат

Выберите любой из описанных выше способов, механика будет одинаковой: запросить URL, прочитать <head>, записать строку. Эту цепочку рвут пять вещей, и большинство из них никак не связаны с метаданными страницы.

Для всех пяти работает одно правило: наращивайте сложность постепенно, не начинайте с тяжёлого. Прогоните весь список дешёвым способом, повторно запустите только неудачные URL с рендерингом в браузере, а затем ещё раз прогоните оставшиеся ошибки с другого IP. Большинству URL дорогой путь вообще не нужен.

Начните отсюда: сопоставьте симптом с причиной

Что вы видитеНаиболее вероятная причина
Пустой заголовок, хотя в Chrome страница выглядит нормальноРендеринг JavaScript
Одинаковый заголовок на нескольких несвязанных доменахОтветила защита от ботов
Первые строки заполнены, последующие пустыеОграничение скорости
Все поля заполнены, но значения выглядят странноКонтент, зависящий от страны
Полные данные для страницы, которую вы не запрашивалиРедирект или soft 404

Страница формирует заголовок через JavaScript

Вы открываете URL в Chrome и видите заголовок прямо во вкладке, но ваш скрипт ничего не возвращает. Оба наблюдения верны.

Сервер отдал почти пустую HTML-оболочку, а браузер выполнил JavaScript, который её заполнил. Так ведут себя все приложения на React, Vue, Angular и Next.js без серверного рендеринга. А также множество сайтов, которые отдают основной контент с сервера, но вставляют теги Open Graph на стороне клиента.

Как проверить: открыть view-source: вместо инспектора. Первое показывает то, что отдал сервер, второе - то, что построил браузер. Если заголовок есть во втором и отсутствует в первом, ответ найден.

Решение: выполнить рендеринг страницы. Это значит режим браузера в чекере, включённый JavaScript-рендеринг в краулере или Playwright вместо httpx в вашем скрипте. Рендеринг медленный и ресурсоёмкий, поэтому приберегите его для тех URL, которым он действительно нужен.

Вместо страницы ответила защита от ботов

Cloudflare, Akamai и DataDome стоят перед значительной частью коммерческого веба. Когда они решают, что запрос выглядит автоматизированным, они возвращают страницу-проверку. У этой страницы есть код ответа, HTML и свой собственный вполне корректный <title>, обычно что-то вроде “Just a moment…”.

Это хуже пустого результата, потому что не выглядит как ошибка. Вы получаете заполненную ячейку с неверным содержимым. Пока не прочитаете значения, вы этого не заметите.

Как проверить: отсортируйте экспорт по заголовку. Если у несвязанных доменов один и тот же заголовок, вы раз за разом проверяли одну и ту же страницу-проверку.

Решение: настоящий отпечаток браузера и IP, который не выглядит как датацентровый. Если ваши запросы приходят из диапазона адресов облачного провайдера, часть сайтов отклонит их независимо от того, как составлен сам запрос. Никакая логика парсинга это не обойдёт, ведь именно для этого и существуют резидентские прокси are for.

Попробуйте высококачественные резидентские и мобильные прокси за $3.50 и получите 750 МБ трафика.
Попробовать сейчас

Вы упёрлись в лимит запросов

Пятьдесят запросов к одному домену за десять секунд - это не поведение обычного пользователя. Крупные издания, ecommerce-платформы и всё, что стоит за CDN, начнут возвращать 429, таймауты или пустые тела ответов уже в середине прогона.

Признак здесь позиционный. Первые URL обрабатываются успешно, а последние падают - такую картину не даёт ни одна проблема на стороне самой страницы.

Как проверить: перезапустите отдельно только те URL, которые не прошли. Если по отдельности они отрабатывают, дело было не в страницах.

Решение: замедлитесь и распределите нагрузку. Добавьте задержку между запросами, ограничьте параллельность на домен, ротируйте исходящий IP для больших задач. Список из 50 URL, ведущих на один домен, требует куда больше аккуратности, чем 50 URL на 50 разных доменов.

Страница отдаёт разные метаданные в зависимости от страны

Международные сайты меняют заголовки и описания в зависимости от локали, перенаправляют посетителей в страновую подпапку или отдают другой hreflang набор в зависимости от того, откуда пришёл запрос.

Проверка example.com/product from Istanbul and you may be reading the Turkish page. Your German colleague runs the same check and gets different values. Neither of you is wrong.

Как проверить: сравните URL, который вы запросили, с URL, который вам ответил. Редирект в страновую подпапку - это видимая форма проблемы. Невидимая форма сохраняет URL и подменяет содержимое.

Решение: проверяйте из той страны, которая вам важна. Этот момент легко недооценить, поэтому в следующем разделе он разобран подробно.

Статус 200 на не той странице

Soft 404 возвращают успешный код вместе со страницей ошибки. Цепочки редиректов приводят совсем не туда, куда вы целились. В любом случае метаданные реальны и полны, вот только описывают они другой URL, а не тот, что стоит у вас в таблице.

Как проверить: записывайте финальный URL рядом с запрошенным и сравнивайте два столбца.

Решение: ничего технического. Просто читайте столбцы. Это не стоит ничего и ловит именно те ошибки, которые сильнее всего похожи на чистые данные.

Метаданные, которых не увидеть из одной страны

Если вы аудируете международный сайт из одной локации, вы аудируете лишь одну его версию.

Допустим, у страницы есть немецкий заголовок, французский заголовок и английский вариант по умолчанию. С одного IP вы увидите только один из них. Два других останутся невидимыми, и ничто в вашей выгрузке не намекнёт на их существование. Внешне всё выглядит нормально. В CSV нет пустых ячеек, а заголовки, которые видят ваши немецкие клиенты, так и не попали в таблицу.

То же самое относится и к hreflang. Страница может объявлять полный набор языковых альтернатив для одного региона и урезанный - для другого. Проверка обратных тегов только из одной страны покажет вам конфигурацию, которая выглядит корректной, но сломана для всех остальных.

Три проверки, которые стоит выполнить на любом сайте с международным трафиком:

  • Сохраняется ли запрошенный URL? Сравните то, что вы запросили, с тем, что ответило. Редирект в страновую подпапку означает, что все последующие поля описывают уже другую страницу.
  • Меняется ли заголовок без изменения URL? Тот же адрес, другой контент, никакого сигнала в ответе. Именно это и проскакивает мимо любого аудита.
  • Совпадает ли hreflang -набор при запросе из каждого региона? Отсутствующие обратные теги - частая причина того, что в нужном рынке ранжируется не тот язык.

Все три проверки означают отправку запроса из той страны, которая вам важна, а именно это и делает прокси для веб-скрейпинга are for.

Но будьте точны в формулировке причины. Здесь прокси - это измерительный прибор, а не способ обойти систему блокировок. Проверять немецкие метаданные из Турции - всё равно что проверять перевод на языке, которого вы не знаете.

Практический рабочий процесс для аудита 50 URL

  1. Экспортируйте список URL из вашей карты сайта, Search Console или CMS. Держите список в пределах 50 адресов за один запуск.
  2. Сначала прогоните всё в режиме обычной загрузки, который стоит по умолчанию. Большинство URL откроются, а дешёвый проход покажет, какие из них не откроются.
  3. Отсортируйте по заголовку, прежде чем смотреть на пустые строки. Одинаковые заголовки на не связанных между собой доменах означают, что ответила защита от ботов. Это тот сбой, который прячется.
  4. Сравните запрошенный URL с конечным URL. Любое несовпадение обесценивает все остальные поля в этой строке.
  5. Перезапустите неудачные URL с рендерингом в браузере. Это позволяет получить страницы, собираемые через JavaScript, и часть защищённых страниц.
  6. Повторно запустите проверку всего, что зависит от локали, из целевой страны. Только для международных сайтов и только для страниц, которые важны коммерчески.
  7. Экспортируйте в CSV и сортируйте по типу проблемы, а не по URL. Отсутствующие title, отсутствующие description и случайные noindex директивы — это три отдельные задачи, и сортировка по типу проблемы группирует работу.

Браузер выполнил JavaScript страницы, а инструмент проверки — нет. Откройте view-source: по этому URL, чтобы увидеть, что сервер отправил на самом деле. Если title там отсутствует, но присутствует в инспекторе, значит страница формирует его на стороне клиента и вам нужен метод запроса с рендерингом.

Для нескольких обычных страниц — нет. Proxy становится необходим в двух ситуациях: когда сайт отклоняет автоматические запросы с адресов дата-центров и когда сами метаданные различаются по странам. Второй случай люди упускают, потому что результат выглядит полным.

Обычно потому, что один отрендерил страницу, а другой — нет, или потому, что два запроса пришли из разных стран и страница отдаёт локализованный контент. Проверьте, показывает ли хотя бы один инструмент итоговый URL после редиректов. Если они различаются, инструменты смотрели на разные страницы.

Чтение <head> публичной страницы — это тот же запрос, который делает ваш браузер для её отображения, поэтому обычный конкурентный анализ вполне вписывается в нормальную практику.

Картину меняет объём. Обрушивать на сайт тысячи быстрых запросов — это уже другая деятельность, и большинство проводит границу по соблюдению robots.txt и разумных ограничений по частоте запросов.

Инструмент проверки анализирует URL, которые вы ему даёте. Краулер начинает с одного URL и находит остальные, переходя по ссылкам. Используйте инструмент проверки, когда список у вас уже есть, и краулер — когда задача как раз в том, чтобы этот список собрать.

Вам также могут понравиться эти статьи

Этот сайт использует Файлы cookie чтобы улучшить ваш опыт. Продолжая, вы соглашаетесь на использование файлов cookie.