Sitemap.xml und RSS-Feed in Next.js App RouterTechnisches SEO 2026

sitemap3 Min. Lesezeit20. Juli 2026

Autor: DevStudio.it

TL;DR

Google indexiert schneller mit vollständiger sitemap.xml und RSS für den Blog — Crawler müssen neue Beiträge nicht erraten. Im Next.js App Router erzeugen Sie beides als sitemap.ts und feed.xml/route.ts ohne WordPress-Plugins. Bei Mehrsprachigkeit (pl/en/de) erhält jede Sitemap-URL **hreflang-Alternates; RSS listet nur Beiträge des jeweiligen Locales. Deploy auf DevStudioIT Cloud liefert XML über CDN-Cache. Dynamische Inhalte aus PostgreSQL in Branchly kommen per async Fetch in sitemap.ts.

Für wen

  • Next.js-Unternehmensseiten mit Blog und mehreren Sprachversionen
  • SEO-Teams mit technischer Kontrolle ohne Yoast
  • WordPress-Migrationen — RSS-Abonnenten brauchen neue Feed-URL
  • ISR/static generation — Sitemap muss revalidate widerspiegeln

Keyword

sitemap nextjs app router, rss feed next.js, feed.xml seo, sitemap.ts mehrsprachigkeit, robots.txt nextjs 2026, hreflang sitemap

sitemap.xml — MetadataRoute

import type { MetadataRoute } from 'next';
import { getBlogPosts } from '@/lib/blog';

const BASE = 'https://devstudioit.com';

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const staticRoutes = ['', '/webentwicklung', '/blog', '/kontakt'].flatMap((path) =>
    ['pl', 'en', 'de'].map((locale) => ({
      url: `${BASE}/${locale}${path}`,
      lastModified: new Date(),
      changeFrequency: 'weekly' as const,
      priority: path === '' ? 1 : 0.8,
    }))
  );

  const posts = await getBlogPosts();
  const blogEntries = posts.map((post) => ({
    url: `${BASE}/${post.locale}/blog/${post.slug}`,
    lastModified: new Date(post.updated ?? post.date),
    changeFrequency: 'monthly' as const,
    priority: 0.6,
  }));

  return [...staticRoutes, ...blogEntries];
}

Ergebnis unter /sitemap.xml. Kein manuelles XML in public/.

Feld Empfehlung
lastModified Echtes Änderungsdatum
changeFrequency weekly / monthly
priority 0,5–1,0 relativ

Mehrsprachigkeit — hreflang

export async function generateMetadata({ params }): Promise<Metadata> {
  const { locale, slug } = await params;
  return {
    alternates: {
      canonical: `https://devstudioit.com/${locale}/blog/${slug}`,
      languages: {
        pl: `https://devstudioit.com/pl/blog/${slug}`,
        en: `https://devstudioit.com/en/blog/${slug}`,
        de: `https://devstudioit.com/de/blog/${slug}`,
      },
    },
  };
}

Konsistenz zwischen &lt;head&gt; und Sitemap ist wichtiger als die Wahl einer einzelnen Methode.

RSS / feed.xml

export async function GET(
  _req: Request,
  { params }: { params: Promise<{ locale: string }> }
) {
  const { locale } = await params;
  const posts = await getBlogPosts(locale);
  const site = `https://devstudioit.com/${locale}`;
  // ... RSS 2.0 XML bauen
  return new Response(xml, {
    headers: {
      'Content-Type': 'application/rss+xml; charset=utf-8',
      'Cache-Control': 'public, s-maxage=3600, stale-while-revalidate=86400',
    },
  });
}

URLs: /de/feed.xml, /en/feed.xml. &lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot;&gt; im Blog-Head.

robots.ts

export default function robots(): MetadataRoute.Robots {
  return {
    rules: { userAgent: '*', allow: '/', disallow: ['/api/', '/admin/'] },
    sitemap: 'https://devstudioit.com/sitemap.xml',
  };
}

Staging auf DevStudioIT Cloud mit noindex — eigene Instanz, eigene robots.

Dynamische Inhalte aus Branchly

Case Studies aus PostgreSQL (Branchly) per findMany in sitemap.ts. revalidate: 3600 für stündliche Aktualisierung ohne Full Redeploy.

Validierung

Test Tool
Sitemap Google Search Console
RSS validator.w3.org/feed
hreflang Screaming Frog

Sitemap einmal in Search Console einreichen.

FAQ

Ein RSS oder pro Locale?

Pro Locale — klarer für Abonnenten und &lt;language&gt; im Kanal.

noindex-URLs in Sitemap?

Nein — Crawl Budget verschwenden. Drafts und /preview filtern.

RSS vs Atom?

RSS 2.0 für maximale Kompatibilität.

Rebuild bei 100+ Beiträgen?

Markdown im Repo: bei jedem Build. CMS: async Fetch + revalidate reicht.

Sitemap und RSS für Ihr Next.js?

Ähnliche Beiträge

Google Search Console und Next.js-Indexierung — SSR, SSG und Sitemap 2026
5 Min. Lesezeit
JSON-LD und Schema.org — SEO für Unternehmenswebsites in Next.js (Leitfaden 2026)
9 Min. Lesezeit
Stripe Customer Portal — Abos, Webhooks und Next.js 2026
5 Min. Lesezeit

Über den Autor

Wir bauen schnelle Websites, Web/Mobile-Apps, KI-Chatbots und Hosting — mit Fokus auf SEO und Conversion.

Empfohlene Links

Von Theorie zu Produktion — Branchly, Hosting-Stack und Referenzen.

Gefällt euch unser Ansatz? Lasst uns gemeinsam bauen.

Projektkonfiguration starten