Technical SEO checklist 2026 — 40 punktów (fundament przed contentem)
Technical SEO to fundament, który pozwala Google/LLM w ogóle ZOBACZYĆ Twoją stronę. Bez niego najlepszy content nie rankuje — Google nie może go zaindeksować. 40 punktów w 5 kategoriach: crawling/indexing, URL structure, rendering/performance, hreflang/i18n, security + structured data. Z narzędziami, priorytetami i konkretnym kodem Next.js.
Dlaczego technical SEO PRZED contentem?
Kolejność priorytetów: (1) Technical SEO — Google musi ZOBACZYĆ stronę, (2) On-page SEO — title/H1/Schema.org dla tego co widzi, (3) Content — wartościowy tekst który odpowiada na intent, (4) Backlinki — autorytet zewnętrzny. Pominięcie technical = cały content marketing jest marnowany. Zmiana kolejności = przepłacanie za agencje SEO które „optymalizują content" na stronach których Google nie crawluje.
Crawling + Indexing
8 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.
Public URL /robots.txt, zezwala na crawlowanie ścieżek SEO, blokuje admin/api. Sprawdź w GSC → Settings → robots.txt Tester.
Submit w GSC, link w robots.txt. Max 50k URL-i / 50MB per plik. W Next.js: `app/sitemap.ts` z lastModified.
Bez kanonikalizowanych duplikatów, bez 404, bez noindex. Ahrefs Site Audit sprawdza automatycznie.
GSC → Coverage → „Excluded by noindex tag" — sprawdź czy nie masz production URLs z noindex (najczęstszy błąd po staging).
Self-referencing canonical na wszystkich URL-ach. Dla duplicated content (np. /?sort=price) canonical do bazowej wersji.
Redirect chain > 2 skoki = utrata link equity. Fix: bezpośredni 301 z starego na finalne URL.
Google patrzy na TREŚĆ — jeśli strona mówi „nie znaleziono" ale zwraca 200, to soft 404. Fix: prawidłowy status 404 lub 410.
Strony „osierocone" (bez linków) nie rankują. Screaming Frog → Reports → Internal → All → filter „Inlinks = 0".
URL Structure + Canonical
7 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.
/blog/nazwa-artykulu zamiast /post?id=123. Małe litery, dash separator, bez polskich znaków (albo Punycode).
Wybierz jedną wersję (np. https://gmweb.pl — bez www), 301 redirect z pozostałych. GSC: dodaj wszystkie warianty jako properties.
/blog/ vs /blog — wybierz jedną, 301 z drugiej. Inaczej = duplikat content. Next.js: config `trailingSlash: false` (domyślnie).
Filters (?sort, ?color, ?page=2) → canonical do bazowej lub noindex. Pagination: rel="prev/next" już deprecated przez Google, canonical wystarczy.
Static URLs = linki z zewnątrz działają. Zmiana URL = 301 + utrata 10-15% link juice.
?sessionid=abc123 w URL = Google uznaje za duplikat per user. Fix: session w cookie, nie URL.
Dłuższe są obcinane w SERP. Usuń zbędne słowa („dla", „i", „oraz") z keyword-rich URLs.
Rendering + Performance
9 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.
Content w czystym HTML (SSR) lub prerenderowany (SSG). Client-side React bez SSR = Google widzi pusty `<div id="root">`. Next.js App Router = SSR domyślnie.
Largest Contentful Paint. Fix: lazy load below-fold images, preload hero image, `font-display: swap`, critical CSS inline.
Cumulative Layout Shift. Fix: width/height na obrazach, fonts z fallback mapped same, zarezerwowane miejsce na ads/embeds.
Interaction to Next Paint (zastąpił FID w 2024). Fix: code splitting, `useTransition`, unikaj long tasks >50ms, lazy load third-party scripts.
WebP = -30-40% vs JPEG, AVIF = -50%. Next/Image robi to automatycznie + responsive srcset.
Google Fonts self-hosted lub `next/font`. Preload krytycznych: `<link rel="preload" as="font" type="font/woff2" crossorigin>`.
Większe = wolne loading na 3G. Fix: code splitting per route, tree shaking, lazy imports, usuń dead code.
Analytics, chat, ads — lazy load po interaction. Next.js: `<Script strategy="lazyOnload">` lub `afterInteractive`.
Edge deployment = -50-70% TTFB globalnie. Cloudflare Workers / Vercel Edge / Akamai. Cache HTML statyczny 1h+, assets 1 rok z hash.
Hreflang + i18n
6 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.
`<link rel="alternate" hreflang="pl" href="...">` dla każdego języka. Next.js: `metadata.alternates.languages` w Page/Layout.
Google domyślnie pokazuje tę wersję dla regionów nieobsługiwanych. Zwykle najszerzej obsługiwany język (PL dla PL firm, EN dla international).
Strona /en/about musi mieć hreflang do /de/about — I ODWROTNIE. Brak zwrotu = Google ignoruje hreflang. Screaming Frog sprawdza.
ISO 639-1 (język) + ISO 3166-1 (region). „en-UK" = błąd, poprawnie „en-GB". „pt-BR" dla Brazylii vs „pt-PT" dla Portugalii.
/pl/, /en/, /de/ lub en.domena.pl. NIE: jeden URL z JavaScript language detection (Google nie widzi przełączenia).
GT = niska jakość, Google rozpoznaje i obniża ranking. Profesjonalny tłumacz lub native speaker. Koszt: 0.08-0.15 PLN/słowo.
Security + Structured Data
10 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.
Let's Encrypt (darmowy, auto-renew) lub Cloudflare. Force HTTPS — 301 z http → https. Test: ssllabs.com/ssltest/.
Wymusza HTTPS dla kolejnych wizyt. Header: `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`.
Chroni przed XSS. Minimum: `default-src self; script-src self trusted-cdns; style-src self unsafe-inline`.
Validator.schema.org + Google Rich Results Test. Najczęstsze błędy: brakujące required fields, duplicate @id, niezgodność typu (np. Product bez offers).
Homepage = Organization + WebSite. Blog post = Article + Author + Publisher. Product page = Product + Offer + AggregateRating. Local business = LocalBusiness + geo + openingHours.
og:title, og:description, og:image (1200×630), og:url, og:type. Twitter: summary_large_image. Test: metatags.io.
Favicon 32×32 + 16×16. Apple Touch Icon 180×180. manifest.json dla PWA (icons 192/512, theme_color, background_color).
Nowy standard 2026 — /llms.txt informuje ChatGPT/Claude/Perplexity o strukturze strony. Wzór: llmstxt.org/llms.txt — tytuł, opis, sekcje z linkami do kluczowych stron.
Cloudflare Bot Management lub nginx rate limit. Whitelist znanych user-agents (Googlebot, Bingbot, ClaudeBot). Blokuj agresywne scrapery (AhrefsBot przy high frequency).
Uptime: Better Uptime / Pingdom (monitoring co 1 min + Slack alert). CWV regression: GA4 + Cloudflare Analytics + Lighthouse CI w CI/CD.
Priorytetyzacja 40 punktów — kolejność fix
Nie wszystko naraz. Priorytety wg impactu:
Narzędzia — stack 2026
Najczęstsze pytania (FAQ)
Czym różni się technical SEO od on-page SEO?
Technical SEO = fundament, który pozwala Google/LLM w ogóle ZOBACZYĆ Twoją stronę (crawling, indexing, rendering, URL structure, hreflang, bezpieczeństwo, Core Web Vitals). On-page SEO = optymalizacja CONTENTU widocznego przez Google po zaindeksowaniu (title, H1, meta description, słowa kluczowe, Schema.org, linki wewnętrzne). Bez technical SEO on-page nie działa — możesz mieć najlepszy content, ale jeśli Google nie może go zaindeksować (np. noindex, robots.txt blokuje, content w JS bez SSR), ranking = zero. Kolejność pracy: (1) technical fundament, (2) Schema.org + on-page, (3) content + backlinki.
Jak często robić technical SEO audit?
Dla aktywnie rozwijanej strony: (1) Przed każdym major release — szybki audit 40-punktowy (czas: 2h). (2) Co kwartał — pełny audit z narzędziami (Screaming Frog, Ahrefs Site Audit, Google Search Console Coverage). (3) Po redesignie/migracji — obowiązkowy pełny audit + monitoring 30 dni. (4) Miesięcznie — sprawdzaj GSC Coverage Report dla nowych errors (404, 500, noindex, canonical issues). (5) Codziennie — alerts dla uptime + Core Web Vitals regressions (PostHog/GA4 + Cloudflare Analytics). Dla większości SMB: raz na kwartał pełny + monthly GSC check = wystarcza.
Jakie narzędzia do technical SEO?
TOP stack 2026: (1) Google Search Console — #1 darmowe (Coverage Report, Core Web Vitals, Mobile Usability, Sitemap status, URL Inspection). (2) Screaming Frog SEO Spider — desktop crawler (darmowy do 500 URL, 149 GBP/rok nieograniczony) — rich snippets, hreflang, canonical, status codes. (3) Ahrefs Site Audit — 199 USD/mies, 150+ technical checks, automated weekly scans, prioritized issues. (4) PageSpeed Insights + Lighthouse — darmowe, Core Web Vitals + optymalizacja per URL. (5) Schema Markup Validator (validator.schema.org) — walidacja JSON-LD. (6) Google Rich Results Test — czy rich snippets się wyświetlą. (7) Chrome DevTools — Network tab (waterfall), Lighthouse, Coverage, Rendering panel (JS/CSS/fonts).
Next.js technical SEO — co konkretnego?
Next.js 16 specyfika: (1) App Router + React Server Components = SSR/SSG domyślnie (zero JS blur). (2) `metadata` export per page — automatyczne title/description/og + canonical. (3) `generateStaticParams` dla dynamicznych tras + ISR lub force-static. (4) `sitemap.ts` i `robots.ts` API w app/ — automatycznie obsługiwane. (5) `next/image` = optymalizacja obrazów (WebP + lazy load + responsive srcset). (6) `next/script` z `strategy="afterInteractive"` dla JSON-LD Schema. (7) i18n przez `[lang]` dynamic route + hreflang w metadata.alternates. (8) Cloudflare Workers deploy via OpenNext = edge CDN, zero cold start. Ten blog jest zbudowany na tym stacku — sprawdź Schema w źródle.
Co to jest „render-blocking" i jak naprawić?
Render-blocking = zasoby (CSS, JS, fonts) które BLOKUJĄ pierwsze renderowanie strony. Przeglądarka musi je pobrać + zparsować przed pokazaniem czegokolwiek. Skutek: wysokie LCP (Core Web Vital), użytkownik widzi białą stronę. Fix: (1) CSS → inline critical CSS (above-the-fold) + deferred reszty. (2) JS → `defer` / `async` atrybuty + code splitting (Next.js robi to domyślnie). (3) Fonts → `font-display: swap` + preload krytycznych (`<link rel="preload">`). (4) Third-party scripts (analytics, chat widgets, ads) → `next/script strategy="lazyOnload"` lub `afterInteractive`. Test: Chrome DevTools → Lighthouse → „Eliminate render-blocking resources" — pokazuje konkretne pliki.
Hreflang — jak nie zrobić błędu?
4 najczęstsze błędy hreflang: (1) Brakujący x-default — Google nie wie którą wersję pokazać gdy żadna nie pasuje. Fix: dodaj hreflang="x-default" dla głównej wersji. (2) Niezgodność — strona /en/about ma hreflang do /de/about, ale /de/about NIE ma zwrotnego do /en/about. Wszystkie wersje muszą mieć WZAJEMNE linki. (3) Wrong language code — „en-UK" to błąd, powinno być „en-GB". Lista oficjalna: ISO 639-1 (język) + ISO 3166-1 alpha-2 (region). (4) Link do 404/redirect — hreflang wskazuje na nieistniejącą stronę. Fix: sprawdź w Screaming Frog → Reports → Hreflang → Missing/Missing Return Links/Non-200/Inconsistent. W Next.js: `metadata.alternates.languages` auto-generuje poprawne tagi.
Potrzebujesz technical SEO audit?
Przeprowadzamy audit 40-punktowy z narzędziami (Screaming Frog + Ahrefs + Lighthouse) + priorytyzowany raport fix-ów. Od 1 500 zł dla stron do 500 URL.
Umów konsultacjęPowiązane artykuły
SEO audit checklist — 50 punktów
Self-audit w 2h: 6 kategorii (techniczne + on-page + content + linki + CWV + Schema).
Core Web Vitals 2026
LCP ≤2.5s, CLS ≤0.1, INP ≤200ms — narzędzia + debug per metric.
Google Search Console — przewodnik
Jak wycisnąć 100% z darmowego narzędzia SEO — Coverage + Performance + URL Inspection.
Schema.org dla firm lokalnych
Implementacja LocalBusiness, Service, Person, AggregateRating — kod + przykłady.