Twitter Cards позволяют расширять визуальное представление ссылок на страницы сайта в ленте Twitter. С помощью MDX можно интегрировать эти метаданные непосредственно в компоненты страницы, сочетая преимущества Markdown и JSX.
Каждая Twitter Card требует определённого набора метатегов, которые
вставляются в <head> HTML-документа. Основные
теги:
twitter:card — определяет тип
карточки. Основные значения:
summary — стандартная карточка с заголовком и
описанием;summary_large_image — карточка с крупным
изображением;app — карточка для мобильного приложения;player — карточка с воспроизведением медиа.twitter:title — заголовок
карточки.
twitter:description — краткое
описание страницы.
twitter:image — URL изображения,
отображаемого в карточке.
twitter:site — @username владельца
сайта.
twitter:creator — @username автора
контента.
Пример вставки в MDX через JSX:
import { Helmet } from 'react-helmet';
<Helmet>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Пример Twitter Card с MDX" />
<meta name="twitter:description" content="Подробное описание для отображения в Twitter." />
<meta name="twitter:image" content="https://example.com/image.png" />
<meta name="twitter:site" content="@example_site" />
<meta name="twitter:creator" content="@author_name" />
</Helmet>
MDX позволяет использовать JSX-компоненты внутри Markdown, что
упрощает работу с динамическими метаданными. Например, создание
переиспользуемого компонента TwitterCard:
import { Helmet } from 'react-helmet';
export const TwitterCard = ({ title, description, image, site, creator }) => (
<Helmet>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
<meta name="twitter:site" content={site} />
<meta name="twitter:creator" content={creator} />
</Helmet>
);
Использование в MDX:
<TwitterCard
title="Продвинутый пример MDX"
description="Использование компонентов для Twitter Cards."
image="https://example.com/advanced-image.png"
site="@example_site"
creator="@author_name"
/>
MDX поддерживает импорт данных из JSON или JavaScript, что позволяет автоматически генерировать метаданные для разных страниц блога или продуктов:
import { Helmet } from 'react-helmet';
import postData from './postData.json';
const post = postData.find(p => p.id === 'post-123');
<Helmet>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={post.title} />
<meta name="twitter:description" content={post.summary} />
<meta name="twitter:image" content={post.image} />
<meta name="twitter:site" content="@example_site" />
<meta name="twitter:creator" content={post.authorTwitter} />
</Helmet>
Тип карточки задаётся через twitter:card. Для
summary и summary_large_image используются
одинаковые поля, но для карточек player и app
необходимо добавлять дополнительные теги:
Player Card:
twitter:player — URL iframe плеера.twitter:player:width и
twitter:player:height — размеры плеера.App Card:
twitter:app:name:iphone,
twitter:app:id:iphone,
twitter:app:url:iphoneПример Player Card в MDX:
<Helmet>
<meta name="twitter:card" content="player" />
<meta name="twitter:title" content="Видео пример" />
<meta name="twitter:description" content="Пример плеер-карточки для Twitter." />
<meta name="twitter:player" content="https://example.com/player.html" />
<meta name="twitter:player:width" content="480" />
<meta name="twitter:player:height" content="360" />
<meta name="twitter:image" content="https://example.com/thumbnail.png" />
</Helmet>
Twitter предоставляет инструмент Card Validator, который позволяет проверить корректность метаданных и предварительный вид карточки. Важно проверять:
twitter:site и
twitter:creator.summary_large_image улучшает визуальную
привлекательность, но увеличивает время загрузки. Для блога
рекомендуется использовать сжатые изображения с минимальным качеством,
сохраняющим читаемость.Twitter Cards часто используются совместно с Open Graph
(og:title, og:description,
og:image), так как это позволяет корректно отображать
карточки на других платформах (Facebook, LinkedIn). В MDX можно
объединить метаданные в одном компоненте:
import { Helmet } from 'react-helmet';
<Helmet>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={image} />
<meta property="og:type" content="article" />
</Helmet>
Использование MDX для генерации Twitter Cards позволяет централизованно управлять метаданными, создавать переиспользуемые компоненты и автоматически подставлять значения из данных, сохраняя удобочитаемость Markdown-контента.