SEO 24 kwietnia 2026 12 min czytania

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.

Kategoria 1 / 5

Crawling + Indexing

8 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.

1
robots.txt poprawny

Public URL /robots.txt, zezwala na crawlowanie ścieżek SEO, blokuje admin/api. Sprawdź w GSC → Settings → robots.txt Tester.

2
sitemap.xml dostępny

Submit w GSC, link w robots.txt. Max 50k URL-i / 50MB per plik. W Next.js: `app/sitemap.ts` z lastModified.

3
Sitemap zawiera WSZYSTKIE indexable URLs

Bez kanonikalizowanych duplikatów, bez 404, bez noindex. Ahrefs Site Audit sprawdza automatycznie.

4
Brak noindex na ważnych stronach

GSC → Coverage → „Excluded by noindex tag" — sprawdź czy nie masz production URLs z noindex (najczęstszy błąd po staging).

5
Canonical tags poprawne

Self-referencing canonical na wszystkich URL-ach. Dla duplicated content (np. /?sort=price) canonical do bazowej wersji.

6
Brak redirect chains (3xx→3xx→200)

Redirect chain > 2 skoki = utrata link equity. Fix: bezpośredni 301 z starego na finalne URL.

7
Brak soft 404 (200 ze stroną „not found")

Google patrzy na TREŚĆ — jeśli strona mówi „nie znaleziono" ale zwraca 200, to soft 404. Fix: prawidłowy status 404 lub 410.

8
Internal linking — każda strona ma ≥1 link wewnętrzny

Strony „osierocone" (bez linków) nie rankują. Screaming Frog → Reports → Internal → All → filter „Inlinks = 0".

Kategoria 2 / 5

URL Structure + Canonical

7 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.

9
URLe czytelne + semantyczne

/blog/nazwa-artykulu zamiast /post?id=123. Małe litery, dash separator, bez polskich znaków (albo Punycode).

10
Konsekwentnie www vs non-www + https vs http

Wybierz jedną wersję (np. https://gmweb.pl — bez www), 301 redirect z pozostałych. GSC: dodaj wszystkie warianty jako properties.

11
Trailing slash consistency

/blog/ vs /blog — wybierz jedną, 301 z drugiej. Inaczej = duplikat content. Next.js: config `trailingSlash: false` (domyślnie).

12
Parametry URL — canonical lub noindex

Filters (?sort, ?color, ?page=2) → canonical do bazowej lub noindex. Pagination: rel="prev/next" już deprecated przez Google, canonical wystarczy.

13
URL nie zmieniają się po każdym deploy

Static URLs = linki z zewnątrz działają. Zmiana URL = 301 + utrata 10-15% link juice.

14
Brak session IDs w URL

?sessionid=abc123 w URL = Google uznaje za duplikat per user. Fix: session w cookie, nie URL.

15
Max długość URL ~75 znaków

Dłuższe są obcinane w SERP. Usuń zbędne słowa („dla", „i", „oraz") z keyword-rich URLs.

Kategoria 3 / 5

Rendering + Performance

9 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.

16
SSR/SSG dla crawlable contentu

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.

17
Core Web Vitals: LCP ≤2.5s

Largest Contentful Paint. Fix: lazy load below-fold images, preload hero image, `font-display: swap`, critical CSS inline.

18
Core Web Vitals: CLS ≤0.1

Cumulative Layout Shift. Fix: width/height na obrazach, fonts z fallback mapped same, zarezerwowane miejsce na ads/embeds.

19
Core Web Vitals: INP ≤200ms

Interaction to Next Paint (zastąpił FID w 2024). Fix: code splitting, `useTransition`, unikaj long tasks >50ms, lazy load third-party scripts.

20
Obrazy w WebP/AVIF + lazy load

WebP = -30-40% vs JPEG, AVIF = -50%. Next/Image robi to automatycznie + responsive srcset.

21
Fonts preload + font-display: swap

Google Fonts self-hosted lub `next/font`. Preload krytycznych: `<link rel="preload" as="font" type="font/woff2" crossorigin>`.

22
JavaScript bundle < 200KB gzipped

Większe = wolne loading na 3G. Fix: code splitting per route, tree shaking, lazy imports, usuń dead code.

23
Third-party scripts z priority="low"

Analytics, chat, ads — lazy load po interaction. Next.js: `<Script strategy="lazyOnload">` lub `afterInteractive`.

24
Edge caching / CDN (Cloudflare, Vercel)

Edge deployment = -50-70% TTFB globalnie. Cloudflare Workers / Vercel Edge / Akamai. Cache HTML statyczny 1h+, assets 1 rok z hash.

Kategoria 4 / 5

Hreflang + i18n

6 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.

25
hreflang dla każdej wersji językowej

`<link rel="alternate" hreflang="pl" href="...">` dla każdego języka. Next.js: `metadata.alternates.languages` w Page/Layout.

26
hreflang x-default dla domyślnej

Google domyślnie pokazuje tę wersję dla regionów nieobsługiwanych. Zwykle najszerzej obsługiwany język (PL dla PL firm, EN dla international).

27
Wzajemne linkowanie hreflang

Strona /en/about musi mieć hreflang do /de/about — I ODWROTNIE. Brak zwrotu = Google ignoruje hreflang. Screaming Frog sprawdza.

28
Poprawne kody ISO

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.

29
Separate URLs per język (nie cookie detection)

/pl/, /en/, /de/ lub en.domena.pl. NIE: jeden URL z JavaScript language detection (Google nie widzi przełączenia).

30
Tłumaczenia HUMAN (nie Google Translate)

GT = niska jakość, Google rozpoznaje i obniża ranking. Profesjonalny tłumacz lub native speaker. Koszt: 0.08-0.15 PLN/słowo.

Kategoria 5 / 5

Security + Structured Data

10 punktów — sprawdź każdy w Screaming Frog lub Ahrefs Site Audit.

31
HTTPS z poprawnym SSL/TLS

Let's Encrypt (darmowy, auto-renew) lub Cloudflare. Force HTTPS — 301 z http → https. Test: ssllabs.com/ssltest/.

32
HSTS header (Strict-Transport-Security)

Wymusza HTTPS dla kolejnych wizyt. Header: `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`.

33
CSP (Content Security Policy)

Chroni przed XSS. Minimum: `default-src self; script-src self trusted-cdns; style-src self unsafe-inline`.

34
JSON-LD Schema.org valid

Validator.schema.org + Google Rich Results Test. Najczęstsze błędy: brakujące required fields, duplicate @id, niezgodność typu (np. Product bez offers).

35
Schema.org per typ strony

Homepage = Organization + WebSite. Blog post = Article + Author + Publisher. Product page = Product + Offer + AggregateRating. Local business = LocalBusiness + geo + openingHours.

36
Open Graph + Twitter Card tags

og:title, og:description, og:image (1200×630), og:url, og:type. Twitter: summary_large_image. Test: metatags.io.

37
Favicon + Apple Touch Icon + manifest.json

Favicon 32×32 + 16×16. Apple Touch Icon 180×180. manifest.json dla PWA (icons 192/512, theme_color, background_color).

38
Plik llms.txt dla LLM crawlerów

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.

39
Ochrona przed scrapingiem (rate limiting)

Cloudflare Bot Management lub nginx rate limit. Whitelist znanych user-agents (Googlebot, Bingbot, ClaudeBot). Blokuj agresywne scrapery (AhrefsBot przy high frequency).

40
Monitoring: uptime + CWV regression alerts

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:

🚨 CRITICAL (napraw w 24h)
#4 noindex na produkcji, #32 brak HTTPS, #8 soft 404 na ważnych stronach, #1 zły robots.txt blokujący crawling.
⚡ HIGH (tydzień)
#5 canonical, #17-19 Core Web Vitals, #16 SSR/SSG, #34-35 Schema.org, #25-27 hreflang (jeśli multi-lang).
📋 MEDIUM (miesiąc)
#20-23 obrazy + fonts + JS bundle, #36 Open Graph, #6-7 redirects + soft 404, #38 llms.txt.
🔄 ONGOING (monitoring)
#40 monitoring + alerts, #33 CSP, #39 rate limiting, #3 sitemap consistency.

Narzędzia — stack 2026

Google Search Console
Darmowe
Coverage + CWV + Sitemap + URL Inspection
Screaming Frog SEO Spider
149 GBP/rok
Desktop crawler + hreflang + canonical + status codes
Ahrefs Site Audit
199 USD/mies
150+ automated checks + weekly scans + prioritized issues
PageSpeed Insights + Lighthouse
Darmowe
Core Web Vitals + performance optimization per URL
Schema Markup Validator
Darmowe
JSON-LD validation (validator.schema.org)
Google Rich Results Test
Darmowe
Czy rich snippets się wyświetlą (search.google.com/test/rich-results)

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