MDX (Markdown + JSX) представляет собой расширение стандартного Markdown, позволяющее использовать компоненты React внутри Markdown-файлов. Это делает его идеальным инструментом для документации, где необходимо сочетать текстовое описание с интерактивными примерами. Для эффективного поиска по документации на MDX важно понимать структуру файлов, метаданные и возможности индексации контента.
Каждый MDX-файл может содержать:
Frontmatter — блок YAML в начале файла, который хранит метаданные документации:
---
title: "Компонент Button"
description: "Описание компонента Button"
tags: ["UI", "React", "Button"]
---
Эти данные особенно полезны для фильтрации и поиска по ключевым словам.
Markdown-контент — основной текст документации, который можно разбивать на заголовки, списки, таблицы, ссылки и так далее.
JSX-компоненты — вставки интерактивных примеров или визуализаций, которые могут быть встроены прямо в текст Markdown. Например:
Для поиска важно понимать, что индексация обычно проводится по текстовой части MDX и по метаданным из frontmatter. JSX-компоненты чаще всего игнорируются при полнотекстовом поиске.
Единообразие заголовков Использование
стандартных уровней заголовков (#, ##,
###) позволяет строить дерево документации, по которому
легко навигировать и выполнять поиск по разделам.
Ключевые слова и теги Метки (tags)
и описание (description) в frontmatter играют роль
семантических индикаторов. Их следует формулировать коротко и ёмко,
чтобы поисковая система могла связывать запрос пользователя с нужным
документом.
Разделение на логические блоки Каждый блок с описанием функционала или примерами должен быть отдельной секцией с уникальным заголовком. Это упрощает поиск по конкретным концепциям или компонентам.
Для организации поиска чаще всего используют следующие подходы:
Статическая генерация индекса С помощью
инструментов вроде @mdx-js/mdx можно преобразовать
MDX-файлы в AST (Abstract Syntax Tree). Это позволяет извлечь:
На основе этих данных строится индекс для поискового движка.
Полнотекстовый поиск После генерации AST текст
из Markdown объединяется в массив слов, удаляются стоп-слова и создаётся
поисковый словарь. В современных документационных платформах часто
используют библиотеки вроде Lunr.js или
FlexSearch.
Поиск по тегам и категориям Индексация
frontmatter позволяет выполнять быстрый поиск по структурированным
данным. Например, пользователь ищет все компоненты с тегом
UI или Button.
MDX позволяет добавлять React-компоненты поиска прямо в документацию. Пример подхода:
import { useState } from "react";
import { searchIndex } from "./searchIndex";
export function SearchBar() {
const [query, setQuery] = useState("");
const [results, setResults] = useState([]);
const handleSearch = (e) => {
const q = e.target.value;
setQuery(q);
const matched = searchIndex.filter(item =>
item.title.includes(q) || item.content.includes(q)
);
setResults(matched);
};
return (
{results.map(r => (
- {r.title}
))}
);
}
Такой компонент позволяет делать поиск по подготовленному индексу прямо на клиентской стороне, используя React-логическую структуру.
Разделение контента на небольшие MDX-файлы Большие MDX-документы затрудняют поиск, поэтому лучше делить контент на отдельные файлы для каждого компонента или темы.
Использование slug-идентификаторов Каждый
документ должен иметь уникальный slug, который упрощает
построение ссылок на результаты поиска и навигацию.
Кэширование индекса При больших объемах документации индексы поиска лучше кэшировать, чтобы не пересобирать их при каждом запросе пользователя.
Лексическая нормализация Приведение слов к нижнему регистру, удаление пунктуации и склонений повышает точность поиска.