MDX сочетает возможности Markdown и JSX, позволяя интегрировать компоненты прямо в контент документа. Теги и категории представляют собой метаданные документа, которые обычно используют для организации, фильтрации и отображения содержимого на сайтах и в блогах.
MDX поддерживает frontmatter — специальный блок YAML в начале файла, где задаются ключевые метаданные. Пример структуры для тегов и категорий:
---
title: "Понимание тегов и категорий в MDX"
date: "2026-03-23"
tags:
- javascript
- mdx
- tutorial
categories:
- programming
- web-development
---
Frontmatter автоматически доступен в процессе сборки сайта, например, через Next.js, Gatsby или другие статические генераторы, поддерживающие MDX.
MDX позволяет импортировать React-компоненты и использовать
метаданные прямо внутри документа. Например, для отображения тегов можно
создать компонент Tags:
import { Tags } from '../components/Tags';
export const meta = {
tags: ["javascript", "mdx", "tutorial"],
categories: ["programming", "web-development"]
};
<Tags items={meta.tags} />
Преимущества такого подхода:
С помощью Next.js или Gatsby можно создавать страницы, которые автоматически группируют статьи по тегам:
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
const postsDirectory = path.join(process.cwd(), 'posts');
export function getAllTags() {
const filenames = fs.readdirSync(postsDirectory);
const tags = new Set();
filenames.forEach((filename) => {
const filePath = path.join(postsDirectory, filename);
const fileContents = fs.readFileSync(filePath, 'utf8');
const { data } = matter(fileContents);
if (data.tags) {
data.tags.forEach(tag => tags.add(tag));
}
});
return Array.from(tags);
}
export function getPostsByTag(tag) {
const filenames = fs.readdirSync(postsDirectory);
return filenames
.map(filename => {
const filePath = path.join(postsDirectory, filename);
const fileContents = fs.readFileSync(filePath, 'utf8');
const { data, content } = matter(fileContents);
return { ...data, content };
})
.filter(post => post.tags && post.tags.includes(tag));
}
В отличие от тегов, категории часто имеют иерархическую структуру, например:
categories:
- programming
- programming/javascript
- programming/javascript/mdx
Такой подход позволяет создавать многоуровневую навигацию, где пользователи могут просматривать сначала общую категорию, а затем переходить к более узким темам.
Теги и категории можно выводить различными способами:
Пример компонента для отображения тегов с базовой стилизацией:
export function Tags({ items }) {
return (
<div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>
{items.map(tag => (
<a
key={tag}
href={`/tags/${tag}`}
style={{
padding: '4px 8px',
borderRadius: '4px',
backgroundColor: '#f0f0f0',
textDecoration: 'none',
color: '#333'
}}
>
{tag}
</a>
))}
</div>
);
}
tags и categories) во всех MDX-файлах
для удобной автоматизации.Теги и категории в MDX являются мощным инструментом организации контента, их правильное использование облегчает навигацию, поиск и интеграцию с компонентами интерфейса.