Skip to main content
Назад к блогу
5 мин чтения

Техническое SEO, которое каждый разработчик должен шипить по умолчанию (и которое большинство пропускает)

12-пунктный чеклист технического SEO, который я прогоняю на каждом Next.js-проекте. Большинство разработчиков пропускают минимум 5 из них. Каждый пункт — менее 30 минут на реализацию.

performancenext.js

Большинство разработчиков относятся к SEO как к проблеме маркетинга. Это не так. Техническое SEO — это проблема кода, и большая часть ущерба происходит, когда разработчики шипят без него.

Я проаудировал 15+ Next.js-проектов. В каждом без исключения было минимум 5 из этих 12 проблем. Каждый фикс занимает менее 30 минут. Вместе они — разница между «Google не может проиндексировать половину ваших страниц» и «ваш сайт работает как ожидается».

Чеклист

1. Canonical URL на каждой странице

Без канонического тега Google видит https://site.com/page, https://site.com/page/ и https://site.com/page?ref=twitter как три отдельные страницы с дублирующимся контентом.

// app/[locale]/layout.tsx
export async function generateMetadata({ params }: Props) {
  const { locale } = await params
  return {
    alternates: {
      canonical: `https://dimaver6.com/${locale}`,
    },
  }
}

Каждая страница. Без исключений.

2. hreflang для мультиязычных сайтов

Если у вас несколько языков, Google должен знать, какая страница является эквивалентом на каждом языке. Без hreflang Google может показать русскую страницу англоязычным пользователям.

alternates: {
  languages: {
    en: `/en/${slug}`,
    ru: `/ru/${slug}`,
    uk: `/uk/${slug}`,
  },
}

Я написал полный гайд по i18n-роутингу и SEO-паттернам включая hreflang и x-default.

3. Сайтмап с точным lastmod

Сайтмап говорит Google «вот все мои страницы». Но сайтмап с неправильными lastmod датами хуже, чем отсутствие сайтмапа — он приучает Google игнорировать ваши сигналы свежести.

// app/sitemap.ts — НЕПРАВИЛЬНО
lastModified: new Date(), // каждый билд = «всё изменилось»

// app/sitemap.ts — ПРАВИЛЬНО
lastModified: post.date, // реальная дата изменения контента

Ставьте lastmod на реальную дату, когда контент был осмысленно изменён. Не дату билда. Не new Date().

4. robots.txt, который не блокирует сам себя

Я видел Next.js-проекты, где robots.txt случайно блокировал сайтмап, API-роуты или директорию _next/static.

// app/robots.ts
export default function robots() {
  return {
    rules: { userAgent: '*', allow: '/' },
    sitemap: 'https://dimaver6.com/sitemap.xml',
  }
}

После деплоя проверьте: curl https://yoursite.com/robots.txt. Убедитесь, что разрешён / и указан правильный URL сайтмапа.

5. Meta-тайтлы до 60 символов

Google обрезает тайтлы длиннее ~60 символов. Тайтл, который читается как «How Much Does a Custom SaaS MVP Cost in 2026? A Real Breakdow...» теряет свою силу.

// ✅ 54 символа
title: 'Custom SaaS MVP cost in 2026 — real breakdown'

// ❌ 78 символов — обрезается
title: 'How much does a custom SaaS MVP cost in 2026? A real breakdown from 30 projects'

Ставьте ключевое слово ближе к началу. Бренд в конце (если вообще).

6. Meta-описания, совпадающие с поисковым интентом

Google использует meta description как сниппет в поисковой выдаче. Если ваше дженерик — Google перепишет его (плохо). Если конкретное — Google покажет ваше, и вы контролируете клик.

description: 'Построчная разбивка стоимости реального Next.js MVP за €12K: авторизация, платежи, админка, тестирование, деплой. С тем, что бы я вырезал, чтобы уложиться в €8K.'

Включите основное ключевое слово, конкретную деталь (€12K) и причину кликнуть («что бы я вырезал»). До 155 символов.

7. Структурированные данные (JSON-LD)

Структурированные данные дают Google явную информацию о типе вашего контента. Для блог-постов — схема Article. Для услуг — Service. Для бизнеса — LocalBusiness или ProfessionalService.

<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{
    __html: JSON.stringify({
      '@context': 'https://schema.org',
      '@type': 'Article',
      headline: post.title,
      datePublished: post.date,
      author: {
        '@type': 'Person',
        name: 'Dmitry Vereschagin',
      },
    }),
  }}
/>

Структурированные данные не влияют на ранжирование напрямую, но включают расширенные сниппеты (рейтинги, даты, FAQ), которые драматически улучшают CTR.

8. Alt-текст и размеры изображений

Каждому <Image> нужны три вещи:

Отсутствие alt-текста означает, что Google Image Search не может индексировать ваши изображения. Отсутствие размеров означает CLS, что является фактором ранжирования.

9. Внутренняя перелинковка между связанным контентом

Google находит страницы, переходя по ссылкам. Если на страницу нет ни одной внутренней ссылки, Google может её никогда не найти — даже если она в сайтмапе.

Каждый блог-пост должен ссылаться минимум на 2 связанных поста. Каждая страница услуг — на релевантные кейсы. Каждый кейс — обратно на страницу услуг.

10. Скорость страницы (Core Web Vitals)

Google использует Core Web Vitals как фактор ранжирования. Три метрики:

Я писал о достижении Lighthouse 98 — большая часть работы в устранении ресурсов, блокирующих рендер, и правильном размере изображений.

11. 404-страницы, возвращающие 404-статус

Частая ошибка в Next.js: кастомные 404-страницы, возвращающие статус 200. Google индексирует их как реальные страницы, создавая «мягкие 404» в Search Console.

Проверьте HTTP-статус: curl -I https://yoursite.com/nonexistent-page. Должен вернуть 404, не 200.

12. HTTPS-редирект и www-канонизация

Если и http://, и https:// резолвятся, или и www., и без www. резолвятся, Google видит дублирующийся контент. Настройте один канонический домен и 301-редирект всех вариаций на него.

Большинство хостингов (Vercel, Cloudflare) обрабатывают это автоматически. Проверьте: curl -I http://yoursite.com должен вернуть 301https://yoursite.com.

30-минутный аудит

Запустите эти 4 команды, чтобы найти большинство проблем:

  1. curl -s https://yoursite.com/robots.txt — проверьте корректность
  2. curl -s https://yoursite.com/sitemap.xml | head -50 — проверьте, что страницы перечислены с правильными датами
  3. Chrome DevTools → Lighthouse → SEO-аудит
  4. Google Search Console → Проверка URL → протестируйте важнейшие страницы

Большинство проблем — это конфигурация, не код. Исправьте их один раз, убедитесь, что они переживают деплои, и двигайтесь дальше.


Хотите технический SEO-аудит вашего Next.js-сайта? Напишите — я прогоняю этот чеклист на каждом клиентском проекте и обычно нахожу 5+ быстрых побед.