К блогу

SEO, sitemap и RSS блога

SEO в SaaS-шаблоне часто откладывают на потом — и теряют органический трафик на лендинг и блог. Здесь базовая оптимизация уже подключена: мета-теги, canonical, Open Graph, структурированные данные, sitemap и RSS.

Каждый маркетинговый маршрут экспортирует функцию meta() — стандарт React Router. Внутри вызывается buildMeta из app/lib/seo/meta.ts: title, description, path для canonical, og:image. Единый helper — единообразные теги на всех страницах.

Title формируется через marketingTitle: «Заголовок страницы | Имя продукта». Меняйте SITE_NAME в конфиге SEO — обновятся все страницы. Description уникален для каждого маршрута, не копируйте один текст везде.

Блог-посты на /blog/$slug дополнительно рендерят JsonLd с типом BlogPosting: headline, datePublished, author, publisher. Поисковики используют это для rich snippets в выдаче. Даты берутся из frontmatter publishedAt в Markdown-файлах.

Breadcrumbs: breadcrumbJsonLd на страницах about, blog, changelog. Цепочка «Главная → Блог → Название поста» помогает навигации в SERP.

Sitemap на /sitemap.xml генерируется динамически в loader. getSitemapEntries() собирает статические пути (/, /about, /blog, /pricing и т.д.) и добавляет каждый slug из Velite-коллекции posts. При публикации нового .md в content/blog/ sitemap обновляется после пересборки контента.

robots.txt на /robots.txt разрешает индексацию публичных маршрутов и указывает на sitemap. Закрыты /admin, /api, /auth — нет смысла тратить crawl budget на формы входа и JSON endpoints.

RSS на /blog/rss.xml — для подписчиков и агрегаторов. Каждый item: title, link, description (excerpt), pubDate. Формат совместим с Feedly, Inoreader и т.д. Ссылка на RSS есть на странице /blog.

Open Graph image по умолчанию — /og-default.png. Для важных страниц можно передать кастомный ogImage в buildMeta. Размер 1200×630 — стандарт для соцсетей.

PrefetchLink на маркетинговых страницах ускоряет переходы для пользователей (prefetch при hover). Это не SEO напрямую, но улучшает Core Web Vitals — косвенный фактор ранжирования.

При добавлении публичной страницы: 1) meta() с уникальным description, 2) запись в sitemap.ts если путь не подхватывается автоматически, 3) при необходимости JsonLd. Не индексируйте персональные данные пользователей.

Локализация: шаблон на русском, lang в root и inLanguage в JSON-LD — ru-RU. При мультиязычности понадобятся hreflang и отдельные маршруты — это за рамками текущего шаблона, но meta-инфраструктура расширяема.