ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ
ВсС ΡΡ‚Π°Ρ‚ΡŒΠΈSEO

Next.js App Router для SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π³ΠΈΠ΄ ΠΏΠΎ настройкС динамичСского SEO, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ частых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΊΡ€Π°ΡƒΠ»ΠΈΠ½Π³Π° Π½Π° Next.js.

9 ΠΌΠΈΠ½ чтСния
Next.js App Router для SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” ΡΡ‚Π°Ρ‚ΡŒΡ Π±Π»ΠΎΠ³Π° EvaLab

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с Pages Router Π½Π° App Router Π² Next.js ΠΎΡ‚ΠΊΡ€Ρ‹Π» Π½ΠΎΠ²Ρ‹Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρ‹ для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ вмСстС с Ρ‚Π΅ΠΌ принСс ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ для SEO-спСциалистов. НовыС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Server Components, структуры Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ пСрСсмотра ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ SEO для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сайта ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π½Π° Π±Π°Π·Π΅ Next.js App Router.

1. ИспользованиС встроСнного Metadata API

Π’ App Router большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ext/head`. Next.js прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Metadata API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ статичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСски.

БтатичСскиС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅

Для статичСских страниц достаточно ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ константу metadata ΠΈΠ· Ρ„Π°ΠΉΠ»Π° page.tsx ΠΈΠ»ΠΈ layout.tsx:

import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сайтов Π½Π° Next.js ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡ | EvaLab',
  description: 'ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° быстрых Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ SEO.',
  alternates: {
    canonical: 'https://evalab.site/services/web-systems',
  },
};

ДинамичСскиС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅

Для страниц Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², услуг ΠΈΠ»ΠΈ статСй Π² Π±Π»ΠΎΠ³Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° основС динамичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция generateMetadata:

export async function generateMetadata({ params }): Promise<Metadata> {
  const product = await getProduct(params.id);

  return {
    title: `${product.name} - ΠšΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅Π½Π΅ | EvaLab`,
    description: product.description,
    openGraph: {
      images: [{ url: product.imageUrl }],
    },
  };
}

2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Canonical ΠΈ Hreflang Ρ‚Π΅Π³ΠΎΠ²

Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° β€” частая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… сайтов. Π§Ρ‚ΠΎΠ±Ρ‹ поисковыС Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ индСксировали страницы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ каноничСскиС ссылки.

Π’ layout.tsx Π½Π° самом Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ настройтС свойство metadataBase, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Next.js автоматичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅:

export const metadata: Metadata = {
  metadataBase: new URL('https://evalab.site'),
  alternates: {
    canonical: './',
    languages: {
      'ru-RU': './',
    },
  },
};

3. ДинамичСская гСнСрация Sitemap ΠΈ Robots

ВмСсто статичСских Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ public Π² App Router рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскиС Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² sitemap.ts ΠΈ robots.ts прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ app.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры app/sitemap.ts:

import { MetadataRoute } from 'next';
import { getProducts } from '@/lib/products';

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const products = await getProducts();
  const productUrls = products.map((p) => ({
    url: `https://example.com/products/${p.slug}`,
    lastModified: new Date(p.updatedAt),
  }));

  return [
    {
      url: 'https://example.com',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 1,
    },
    ...productUrls,
  ];
}

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π±Π»ΠΎΠΊ EvaLab: SEO-чСклист для Next.js App Router

Π’ Next.js App Router SEO ломаСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° ΠΌΠ΅Ρ‚Π°-Ρ‚Π΅Π³ΠΎΠ². ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: клиСнтский ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π±Π΅Π· Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ HTML, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ canonical, мягкиС 404, Π΄ΡƒΠ±Π»ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΈ sitemap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ страницы.

Π—ΠΎΠ½Π°Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ
Metadata APItitle, description, canonical, OG, TwitterУправляСт сниппСтом ΠΈ ссылками
БтатичСский HTMLΠ’ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ H1, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π±Π·Π°Ρ†, FAQΠ ΠΎΠ±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚
404ΠΠ΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ URL Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ HTTP 404Π˜Π½Π°Ρ‡Π΅ ЯндСкс Π²ΠΈΠ΄ΠΈΡ‚ мягкиС Π΄ΡƒΠ±Π»ΠΈ
SitemapВсС Π²Π°ΠΆΠ½Ρ‹Π΅ страницы Π² XMLУскоряСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ страниц
RobotsΠ—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слуТСбныС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ΠΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚

Мини-Π°ΡƒΠ΄ΠΈΡ‚

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сайт Ρ‡Π΅Ρ€Π΅Π· Π°ΡƒΠ΄ΠΈΡ‚ сайта ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ нСсколько URL ΠΈΠ· sitemap. Для коммСрчСских страниц Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±Ρ‹Π»ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚, FAQ, structured data ΠΈ внутрСнняя ссылка Π½Π° услугу.

РСзюмС

Next.js App Router прСдоставляСт встроСнныС инструмСнты для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΡŽΠ±Ρ‹Ρ… SEO-Π·Π°Π΄Π°Ρ‡. ИспользованиС Metadata API, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (SSR/ISR) ΠΈ динамичСская гСнСрация слуТСбных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ максимальной видимости Π² поисковых систСмах ЯндСкс ΠΈ Google.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

Π’ процСссС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° использовались ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ спСцификации:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° собранном сайтС: ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ API-ΠΊΠΎΠ΄ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ robots, canonical ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² экспорт. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π΅Π½ тСхничСский SEO-Π°ΡƒΠ΄ΠΈΡ‚.

Автор ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

АлСксСй Боколов

Head of Engineering & Technical SEO

Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π΅Π±-систСм. БпСциализируСтся Π½Π° Next.js, чистой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Core Web Vitals ΠΈ алгоритмичСском Ρ€Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.