{post.title}
{post.description}
MDX (Markdown + JSX) сочетает удобство разметки Markdown с мощью компонентов React, что позволяет создавать динамический и интерактивный контент. Одним из важных аспектов при работе с MDX является управление мета-данными документа, включая мета-описания, которые играют ключевую роль в SEO, отображении контента в социальных сетях и структурировании информации.
Мета-описания — это небольшие текстовые фрагменты, которые описывают содержание документа. В контексте MDX мета-описания обычно задаются в виде frontmatter, блока YAML в начале файла:
---
title: "Введение в MDX"
description: "Подробное руководство по работе с MDX в JavaScript, включая синтаксис, компоненты и интеграцию с React."
author: "Иван Иванов"
date: "2026-03-23"
tags: ["MDX", "JavaScript", "React"]
---
title — название документа, отображаемое в заголовках и
SEO.description — краткое описание содержания, используемое
поисковыми системами и при генерации превью.author — автор материала.date — дата публикации.tags — ключевые слова для категоризации контента.Фронтматтер позволяет структурировать данные документа, чтобы их можно было легко извлечь для динамической генерации страниц или передачи в компоненты.
MDX позволяет использовать мета-данные прямо в JSX-компонентах.
Например, для динамической генерации тегов
можно написать компонент SEO:
import React from 'react';
import { useMDXComponent } from 'next-contentlayer/hooks';
export function SEO({ meta }) {
return (
<>
{meta.title}
>
);
}
В MDX-файле мета-данные можно передать следующим образом:
import { SEO } from './components/SEO';
# Введение в MDX
MDX объединяет Markdown и JSX, позволяя создавать интерактивные документы.
Для масштабных проектов, где используется множество MDX-документов,
целесообразно использовать динамическое извлечение
мета-описаний через frontmatter. В Next.js или
Astro это делается с помощью парсинга файлов:
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
const mdxDirectory = path.join(process.cwd(), 'content');
export function getAllPosts() {
const fileNames = fs.readdirSync(mdxDirectory);
return fileNames.map(fileName => {
const fullPath = path.join(mdxDirectory, fileName);
const fileContents = fs.readFileSync(fullPath, 'utf8');
const { data } = matter(fileContents);
return {
slug: fileName.replace(/\.mdx$/, ''),
...data
};
});
}
gray-matter разбирает frontmatter и возвращает объект с
мета-данными.getAllPosts формирует массив объектов с описанием всех
документов, что удобно для генерации страниц и списка публикаций.Пример:
description: "Освойте MDX для создания интерактивной документации и блогов на React. Подробные примеры и советы по интеграции."
MDX-мета-данные часто используются в сочетании с генераторами статических сайтов (Next.js, Gatsby, Astro):
getStaticProps позволяет
передать frontmatter в компонент страницы для генерации SEO-тегов.gatsby-plugin-mdx
предоставляет GraphQL API для извлечения frontmatter.Astro.fetchContent позволяет
динамически получать мета-данные и использовать их в
.Пример использования в Next.js:
export async function getStaticProps() {
const posts = getAllPosts();
return {
props: { posts }
};
}
// В компоненте страницы
export default function Blog({ posts }) {
return (
<>
{posts.map(post => (
{post.title}
{post.description}
))}
>
);
}
Для корректного отображения при шаринге рекомендуется использовать Open Graph и Twitter Cards, которые можно генерировать на основе мета-описаний:
MDX упрощает этот процесс, позволяя передавать frontmatter напрямую в
компоненты или .