📈 Next.js SEO — A Clean & Practical Checklist
Pokud chcete, aby se vaše stránka Next.js skutečně zobrazovala na Googlu (a vypadala skvěle při sdílení na sociálních sítích), měli byste postupovat takto - krok za krokem.
🏷️ Meta tagy - proč na nich záleží
Meta tagy poskytují vyhledávačům a sociálním platformám informace o vaší stránce.
Pokud je vynecháte, může váš web vypadat na Googlu nebo Twitteru jako prázdná stránka.
👉 Vždy přidejte tyto základní meta značky:
| Tag | Proč je důležitý |
|---|---|
title | Název vaší stránky (to, co lidé vidí ve výsledcích vyhledávání Google) |
description | Krátký popis (viditelný i ve výsledcích vyhledávání) |
keywords | Nepovinné, Google je příliš nepoužívá, ale jsou neškodné |
robots | Říká vyhledávačům, zda mají vaši stránku indexovat |
viewport | Řídí, jak vaše stránky vypadají na mobilních zařízeních |
charSet | Kódování znaků (standardem je UTF-8) |
👉 Meta tagy Open Graph: (pro sdílení na sociálních sítích)
| Tag | Proč je důležitý |
|---|---|
og:site_name | Název vašeho webu |
og:locale | Jazyk/lokální prostředí |
og:title | Název při sdílení na sociálních sítích |
og:description | Popis na sociálních sítích |
og:type | website nebo article |
og:url | URL stránky |
og:image | Obrázek zobrazený v náhledu (použijte PNG/JPG - žádný WebP!) |
og:image:alt | Alt text pro přístupnost |
og:image:type | Typ obrázku (image/png) |
og:image:width + og:image:height | Rozměry obrázku |
👉 Značky Open Graph specifické pro daný článek:
(důležité pro příspěvky na blogu, články, zprávy)
| Tag | Proč je to důležité |
|---|---|
article:published_time | Kdy byl článek zveřejněn |
article:modified_time | Čas poslední aktualizace |
article:author | Jméno autora |
👉 Meta tagy Twitteru: (pro náhledy na Twitter/X)
| Tag | Proč je důležitý |
|---|---|
twitter:card | Velké shrnutí obrázku |
twitter:site | Rukojeť webu na Twitteru |
twitter:creator | Údaj autora na Twitteru |
twitter:title | Název na Twitteru |
twitter:description | Popis na Twitteru |
twitter:image | Adresa URL obrázku (opět PNG/JPG) |
⚙️ Jak přidat meta tagy do Next.js
👉 V App Routeru definujte viewport + metadata:
export const viewport = { width: "device-width", initialScale: 1, themeColor: "#ffffff" };
export const metadata = { title: "Site Title", description: "Krátký popis webu", keywords: Klíčová slova: ["keyword1", "keyword2"], openGraph: { siteName: "My Site", type: "site", locale: "en_US", images: [{ url: "<https://yoursite.com/og-image.png>", width: 1200, height: 630, alt: "Moje stránky" }] }, twitter: { card: (vizitka): "twitter": (vizitka): (vizitka): (vizitka): (vizitka): (vizitka): (vizitka): (vizitka) "summary_large_image", title: "Název stránky", description: "Krátký popis webu", images: [{ url: "<https://yoursite.com/og-image.png>", width: 1200, height: 630, alt: "Moje stránky" }] }, robots: { index: true, follow: true, googleBot: "index, follow" }, alternates: { canonical: "<https://yoursite.com>" } };
👉 Na dynamických stránkách (příspěvky na blogu) použijte generateMetadata():
export async funkce generateMetadata({ params }) { const post = await fetch(`VÁŠ_ENDPOINT/${params.slug}`).then(res => res.json()); return { title: `${post.title} | My Site`, description: post.description, openGraph: { title: `${post.title} | My Site`, description: post.description, type: "article", url: `https://yoursite.com/${post.slug}`, publishedTime: post.created_at, modifiedTime: post.modified_at, authors: ["<https://yoursite.com/about>"], tags: post.categories, obrázky: post.txt: post.txt: [ { url: `https://yoursite.com/assets/${post.slug}/thumbnail.png`, width: 1024, height: 576, alt: post.title } ] }, twitter: { karta: "summary_large_image", title: `${post.title} | My Site`, description: post.description, images: [{ url: `https://yoursite.com/assets/${post.slug}/thumbnail.png`, width: 1024, height: 576, alt: post.title }] }, alternates: { canonical: `https://yoursite.com/${post.slug}` } }; }
📜 JSON-LD schéma - proč se obtěžovat?
JSON-LD přidává "strukturovaná data" pro Google.
Pomáhá Googlu pochopit typ vaší stránky (příspěvek na blogu, produkt, událost...) a zlepšuje rich snippets.
👉 Příklad pro příspěvek na blogu:
Příklad: ```json
const jsonLd = { "@context": "https://schema.org", "@type": "BlogPosting", mainEntityOfPage: {"@type": "WebPage", "@id": "https://yoursite.com/my-post" }, headline: "Post Title", description: "Post description", image: "https://yoursite.com/assets/my-post/thumbnail.png", datePublished: "2024-01-11T11:35:00+07:00", dateModified: "2024-01-11T11:35:00+07:00", {"@type": "Person", name: "Your Name", url: "Vaše jméno": "https://linkedin.com/in/yourname" }, publisher: {"@type": "Person", name: "Your Name", logo: {"@type": "ImageObject", url: "https://yoursite.com/avatar. jpg" } }, inLanguage: "en-US", isFamilyFriendly: "true" };
👉 Vykreslete to ve své komponentě:
```tsx
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
👉 Pro generování schémat použijte tento nástroj: https://technicalseo.com/tools/schema-markup-generator/
🗺️ Mapa stránek - proč ji potřebujete
Mapa stránek pomáhá Googlu procházet všechny vaše stránky. Bez ní se může stát, že některé hluboké odkazy nebudou nikdy zaindexovány.
👉 V routeru stránek:
Použijte next-sitemap
npm install next-sitemap npx next-sitemap
👉 V App Routeru:
Ručně definujte app/sitemap.ts:
export default async function sitemap() { const pages = [ { url: "<https://yoursite.com>", lastModified: new Date(), changeFrequency: "daily", priority: 1 }, { url: "<https://yoursite.com/about>", lastModified: new Date(), changeFrequency: "měsíční", priorita: 0.9 } // další stránky ]; return pages; }
👉 Výsledek bude dostupný na adrese:
arduino
CopyEdit
<https://yoursite.com/sitemap.xml>
🤖 robots.txt - Řízení crawlerů
Soubor robots.txt říká vyhledávačům, které stránky mají procházet nebo ignorovat.
👉 V routeru stránek:
public/robots.txt:
makefile CopyEdit User-agent: * Zakázat: Sitemap: <https://yoursite.com/sitemap.xml>
👉 Blokování určitých stránek:
Zakázat: /search?q= Zakázat: /admin
👉 Ve směrovači aplikací:
Definujte app/robots.ts:
exportovat výchozí funkci robots() { return { rules: { userAgent: "*", allow: ["/"], disallow: ]: ["/search?q=", "/admin"] }, mapa stránek: ["<https://yoursite.com/sitemap.xml>"] }; }
🔗 Důležité značky odkazů
👉 Vždy si je zapište do hlavy:
| Značka odkazu | Účel |
|---|---|
canonical | Předcházejte problémům s duplicitním obsahem - sdělte Googlu "hlavní" adresu URL |
alternate | Používá se u vícejazyčných stránek |
icon | Favicon |
apple-touch-icon | Ikona na domovské obrazovce iOS |
manifest | Pro podporu PWA |
Shrnutí - co byste měli udělat (minimální kontrolní seznam)
✅ Přidejte úplné Meta Tagy (název, popis, OG, Twitter)
✅ Přidejte JSON-LD schéma pro klíčové stránky
✅ Vygenerujte a naservírujte mapu stránek.xml
✅ Podejte soubor robots.txt.
✅ Zahrnout správné značky odkazů (kanonické, ikonové, manifestní).
Pokud toto vše splníte, vaše stránka Next.js bude:
✅ vypadat skvěle ve výsledcích vyhledávání
✅ zobrazovat bohaté náhledy na sociálních sítích
✅ Buďte plně procházitelní a indexovatelní společností Google