Open Graph и Twitter Cards

Управляем тем, как ссылка на сайт выглядит, когда её кидают в соцсеть или мессенджер.

Open Graph (OG) — протокол мета-тегов, который задаёт превью ссылки (картинку, заголовок, описание) при шеринге в соцсетях и мессенджерах. Twitter Cards — аналог для X/Twitter.

Зачем это разработчику

Когда пользователь кидает ссылку в Telegram, ВКонтакте, Facebook или X, платформа показывает карточку-превью. Без OG-тегов она соберёт что попало: случайную картинку, обрезанный текст. Привлекательное превью повышает кликабельность — это влияет на трафик, пусть и не на ранжирование напрямую.

Почему это не «то же, что title»

Логичный вопрос: зачем дублировать заголовок и описание в OG, если уже есть title и meta description? Затем, что это разные каналы с разными правилами показа. Поисковик строит сниппет по своим тегам и может переписать description под запрос. Соцсеть же показывает ровно то, что в OG, и почти всегда с картинкой — а og:image у обычных SEO-тегов аналога нет вовсе. Кроме того, формулировка, которая хорошо работает в поиске («Что такое canonical — пошагово»), в ленте соцсети может звучать суховато. Поэтому OG задают отдельно, даже если по смыслу он близок к title.

Базовые og-теги

OG-теги ставятся в <head> через <meta property="og:...">:

<meta property="og:title"       content="Что такое canonical — CodeChick">
<meta property="og:description" content="Как убрать дубли страниц и не потерять позиции.">
<meta property="og:image"       content="https://codechick.io/og/canonical.png">
<meta property="og:url"         content="https://codechick.io/tutorials/seo/canonical">
<meta property="og:type"        content="article">

Ключевой тег — og:image. Рекомендованный размер картинки превью — 1200×630. Слишком маленькая картинка платформа покажет крошечной иконкой или проигнорирует.

Twitter Cards

X/Twitter использует свои теги, но умеет подхватывать OG. Минимально стоит задать тип карточки:

<meta name="twitter:card"  content="summary_large_image">
<meta name="twitter:title" content="Что такое canonical — CodeChick">
<meta name="twitter:image" content="https://codechick.io/og/canonical.png">

summary_large_image — карточка с большой картинкой; summary — компактная с маленькой.

Как работает под капотом: парсинг превью

Когда вы шерите ссылку, платформа сама делает запрос к странице (часто со своим ботом, например facebookexternalhit), вытаскивает OG-теги из HTML и строит карточку. Смоделируем эту логику разбора:

import re

html = '''
<meta property="og:title" content="Гайд по canonical">
<meta property="og:image" content="https://codechick.io/og.png">
<meta property="og:description" content="Убираем дубли страниц">
'''

def parse_og(html):
    pattern = r'property="og:(\w+)"\s+content="([^"]*)"'
    return {k: v for k, v in re.findall(pattern, html)}

card = parse_og(html)
print("Заголовок:", card.get("title"))
print("Картинка: ", card.get("image"))
print("Описание: ", card.get("description"))

Вывод:

Заголовок: Гайд по canonical
Картинка:  https://codechick.io/og.png
Описание:  Убираем дубли страниц

Важный нюанс: платформенный бот, как и поисковый, обычно не выполняет ваш JavaScript. Если OG-теги добавляются на клиенте, превью соберётся неправильно — теги должны быть в серверном HTML.

Частые ошибки

  • og:image на клиенте — бот не дождётся JS, превью будет без картинки.
  • Относительный URL картинки — нужен абсолютный https://....
  • Маленькая картинка — платформа покажет иконку вместо большой карточки; целевой размер 1200×630.
  • Кеш превью — соцсети кешируют OG надолго; после правок используйте их отладчики, чтобы сбросить кеш.

Итог

  • Open Graph и Twitter Cards управляют превью ссылки при шеринге в соцсети и мессенджеры.
  • Ключевой тег — og:image (1200×630) с абсолютным URL; задавайте также title, description, url, type.
  • OG-теги должны быть в серверном HTML: платформенные боты не исполняют JavaScript.
Проверьте себя
1. За что отвечают Open Graph теги?
AЗа ранжирование страницы в Google
BЗа превью ссылки (картинка, заголовок) при шеринге в соцсети и мессенджеры
CЗа индексацию страницы
DЗа скорость загрузки
2. Почему og:image, добавляемый только на клиенте через JS, — это проблема?
AJS-картинки запрещены протоколом OG
BПлатформенный бот обычно не исполняет JavaScript и не увидит тег — превью будет без картинки
Cog:image нельзя задавать через meta
DЭто замедлит загрузку страницы
3. Какой рекомендованный размер картинки для og:image?
A64×64
B300×100
C1200×630
DЛюбой, размер не важен