Canonical URL — это стандартный способ указания поисковым системам основной версии страницы среди нескольких доступных с одинаковым или схожим контентом. В экосистеме MDX и JavaScript это особенно важно при создании документации, блогов или динамического контента, где один и тот же материал может быть представлен через разные маршруты.
Canonical URL задаётся с помощью HTML-тега
<link rel="canonical" href="..."> в
<head> документа. Этот тег сообщает поисковым
системам, что данная страница является «канонической» версией контента.
Пример базовой установки:
<head>
<link rel="canonical" href="https://example.com/docs/mdx/introduction" />
</head>
В MDX, где контент часто создаётся через компоненты и маршруты на
стороне клиента, добавление canonical URL требует интеграции с
React-компонентами, например через next/head или
аналогичные механизмы.
Для сайтов на Next.js с MDX canonical URL можно устанавливать динамически на основе маршрута страницы. Пример:
import { useRouter } from 'next/router';
import Head from 'next/head';
export default function MDXPage({ content, frontMatter }) {
const router = useRouter();
const canonical = `https://example.com${router.asPath}`;
return (
<>
<Head>
<link rel="canonical" href={canonical} />
<title>{frontMatter.title}</title>
</Head>
<main>
{content}
</main>
</>
);
}
В этом примере:
router.asPath динамически берёт текущий путь
страницы.canonical формируется с полным URL.<link rel="canonical" /> помещается в
<Head> для корректного SEO.MDX позволяет использовать frontMatter для передачи метаданных. Это удобно, когда одна и та же страница может быть доступна по нескольким URL, а canonical необходимо задавать вручную:
---
title: "Введение в MDX"
canonical: "https://example.com/docs/mdx/introduction"
---
# Введение в MDX
Контент страницы...
И соответствующий React-компонент для вставки canonical:
import Head from 'next/head';
export default function MDXLayout({ children, frontMatter }) {
return (
<>
<Head>
{frontMatter.canonical && (
<link rel="canonical" href={frontMatter.canonical} />
)}
<title>{frontMatter.title}</title>
</Head>
<article>{children}</article>
</>
);
}
hreflang вместе с canonical для
правильного индексирования.MDX позволяет внедрять интерактивные компоненты, что усложняет формирование canonical URL. В таких случаях ключевые моменты:
Для SSG (Static Site Generation) на основе MDX, например с Next.js или Gatsby, canonical URL обычно формируется на этапе сборки. Это гарантирует, что каждая страница имеет уникальный и правильный URL:
export async function getStaticProps({ params }) {
const post = getPostBySlug(params.slug);
return {
props: {
content: post.content,
frontMatter: {
...post.frontMatter,
canonical: `https://example.com/posts/${params.slug}`,
},
},
};
}
https://), при формировании canonical.Canonical URL в MDX — это не просто SEO-декор, а инструмент контроля индексации и управления уникальностью контента на динамических и статических сайтах. Его правильное применение гарантирует, что поисковые системы понимают, какая версия страницы является основной, что критично для ранжирования и предотвращения штрафов за дублированный контент.