Pytasz, co dziś naprawdę znaczy „dobry on-page”? W 2025 to nie tylko tytuł i słowo kluczowe w H1. Google coraz lepiej rozumie tematykę, encje i relacje między treściami, a jednocześnie bezlitośnie wyłapuje wolne strony i sztucznie napompowane teksty. Do gry weszły mocniej jakościowe sygnały E-E-A-T, realne doświadczenie autora oraz wrażenia użytkownika mierzone m.in. przez INP. Jeśli strona nie odpowiada szybko, nie prowadzi do konkretnej odpowiedzi i nie jest osadzona w kontekście Twojej całej witryny, spada – nawet jeśli „technicznie” wszystko wygląda dobrze.
Ten artykuł to część naszych treści o nowoczesnym marketingu. Zobacz też kategorie: Poradniki i Case Study
Ta checklista zbiera w jednym miejscu to, co faktycznie podnosi widoczność każdej podstrony: od metadanych i architektury nagłówków, przez intencję wyszukiwania i gęstość informacji, po linkowanie wewnętrzne, dane strukturalne, multimedia, dostępność oraz sygnały zaufania. Uporządkujemy też kwestie często pomijane: kanibalizacja, konsystencja encji, aktualność treści, a nawet mikro-UX (np. czytelne TOC, breadcrumbs, „czas czytania”) wpływający na zaangażowanie.
Dla kogo jest ten materiał? Dla twórców treści, właścicieli firm i SEO, którzy chcą ustandaryzować proces – zamiast każdorazowo „wymyślać SEO na nowo”.
Jak z niego korzystać: potraktuj każdą sekcję jak punkt kontroli przed publikacją i przy aktualizacjach. Zaznacz, co jest gotowe, co do poprawy i co wymaga testu A/B. Po przejściu checklisty Twoja podstrona będzie:
- trafiała w właściwą intencję wyszukiwania,
- szybka i wygodna w odbiorze,
- zaszyta w silne linkowanie wewnętrzne,
- oznaczona właściwym schema,
- przygotowana pod topical authority całej domeny.
Tytuł, meta opis i H1 — perfekcyjne dopasowanie do intencji
Cel sekcji: sprawić, by użytkownik już w SERP-ach wiedział, że to jest dokładnie ta odpowiedź, a na stronie szybko ją „potwierdził” po wejściu.
Szybka checklista (odhacz zanim opublikujesz)
- Intencja: tytuł odpowiada na konkretny typ zapytania (how-to, porównanie, definicja, lista, lokalne, transakcyjne).
- Słowo kluczowe: główna fraza blisko początku tytułu; w H1 naturalna, bez upychania.
- Obietnica wyniku: tytuł mówi co zyskam (np. „checklista”, „kroki”, „szablon”).
- Rok / kontekst: dodany tylko, jeśli treść faktycznie aktualizowana (np. 2025).
- Długość: Title do ~580–600 px (zwykle 50–62 znaki); Description do ~920–990 px (ok. 150–160 znaków).
- Brand: sufiks marki tylko gdy pomaga rozpoznawalności (np. „| StartBlog”).
- Unikalność: żadne inne podstrony nie używają bardzo podobnych tytułów/H1 (unikać kanibalizacji).
- Spójność: Title ⇄ H1 mówią to samo, ale nie muszą być identyczne (Title może być „bardziej sprzedażowy”).
- Meta description: streszcza wynik + USP strony i miękkie CTA („Sprawdź checklistę krok po kroku”).
- TOFU/MOFU/BOFU: dopasuj język — informacyjny vs. porównawczy vs. decyzja/zakup.
Dobre praktyki (które realnie podnoszą CTR)
- Dodaj „nośnik formatu” w tytule: [checklista], [szablon], [porównanie], [kalkulator] — ustawia oczekiwania.
- Używaj liczb i konkretów: „7 kroków”, „15 przykładów”, „INP < 200 ms”.
- Odpowiadaj na PAA-style: formuły pytań („Jak…?”, „Co to jest…?”) i natychmiastowa odpowiedź w pierwszym akapicie.
- Bez click-baitu: obietnica z tytułu musi być dostarczona w treści (inaczej pogo-sticking zabije wyniki).
- Kontrast semantyczny: unikaj bliźniaczych tytułów w obrębie jednego klastra (np. dwa „checklisty” – różnicuj angle).
Formuły tytułów (kopiuj-wklej + podmień zmienne)
- How-to / instrukcja:
{Główne hasło}: krok po kroku [Checklista {rok}] - Porównanie:
{X vs Y}: co wybrać przy {kontekst/budżet}? [+ tabela] - Lista / zasoby:
{Hasło}: {liczba} praktycznych przykładów + szablon - Definicja / encja:
{Pojęcie}: co to jest, jak działa, kiedy stosować - Lokalne (usługa):
{Usługa} {Miasto}: cennik, terminy, realizacje [{rok}] - E-commerce (kategoria):
{Kategoria}: jak wybrać + {liczba} top modeli [{rok}]
Przykłady dopasowane do tego artykułu
- Title (SERP):
On-page SEO w 2025: checklista dla każdej podstrony [+ szablon] | StartBlog - H1 (na stronie):
On-page SEO w 2025: checklista dla każdej podstrony - Meta description:
Przejdź przez on-page krok po kroku: tytuł, H1, intencja, linkowanie, schema, INP. Pobierz gotową checklistę i popraw widoczność.
Mini-warsztat QA (60 sekund)
- Zapisz zapytanie użytkownika (główna fraza + 1–2 long-taile).
- Wybierz typ intencji (how-to/definicja/porównanie/lista/lokalne).
- Ułóż tytuł: fraza na starcie + obietnica formatu/wyniku + ewentualnie rok + | StartBlog.
- Ustal H1: krótszy, czystszy, bez brandu.
- Napisz description: wynik + USP + miękkie CTA (bez „kliknij tutaj”).
- Sprawdź kanibalizację: czy w witrynie nie masz bliźniaczej strony na to samo zapytanie?
Szablony do szybkiego wklejenia
Title (uniwersalny):{Fraza kluczowa}: {obietnica/wynik} [{rok}] | StartBlog
Meta description (uniwersalny):Poznaj {co?} w {ile kroków?/z czym?}. {Kluczowa korzyść} + {USP}. Pobierz {szablon/checklistę} i wdroż to dziś.
H1 (uniwersalny):{Fraza kluczowa}: {format/wynik}
Intencja wyszukiwania i gęstość informacji (zajawka + pierwsze 100 słów)
Cel sekcji: w pierwszych sekundach potwierdzić użytkownikowi „to jest to, czego szukam” i dostarczyć konkret już w leadzie — bez lania wody.
Szybka checklista
- Dopasuj intencję: informacyjna (how-to/definicja), porównawcza, transakcyjna, lokalna, nawigacyjna.
- Answer-first: w pierwszych 1–2 zdaniach streść wynik/korzyść artykułu.
- Fraza i encje: naturalnie użyj głównej frazy + 1–2 powiązanych encji/synonimów w leadzie.
- Konkret + zakres: podaj, co dokładnie czytelnik dostanie (np. liczba kroków, szablon, checklista).
- Zero flafu: unikaj ogólników i truizmów („SEO jest ważne…”).
- Skimmability: po leadzie — krótki bullet preview kluczowych punktów lub mini-TOC.
- Długość: 60–120 słów; jedno zdanie ≤ 22 słowa.
- CTA mikro: subtelne „Zobacz kroki poniżej” / „Pobierz checklistę” — bez sprzedaży na start.
“An INP below or at 200 milliseconds means a page has good responsiveness.”
Google — Interaction to Next Paint (INP)
Tłumaczenie: INP ≤ 200 ms oznacza dobrą responsywność strony.
Mapowanie intencji → kształt leadu
- How-to / instrukcja: „W tym artykule zrobisz A→B→C i osiągniesz X. Potrzebujesz Y. Zaczynamy.”
- Definicja / encja: „{Pojęcie} to… (jedno zdanie). Kiedy ma sens? Jak wdrożyć? Poniżej skrót i przykłady.”
- Porównanie: „{X vs Y}: różnią się w A/B/C. Dla małego budżetu lepsze {X}. Tabela na dole.”
- Transakcyjna / e-commerce: „Szukasz {usługa/produkt} do {celu}? Oto kryteria wyboru + 7 rekomendacji.”
- Lokalna: „{Usługa} w {mieście}: ceny, terminy, kontakt. Sprawdź checklistę wyboru wykonawcy.”
Wzór leadu (kopiuj → podmień)
{Hasło główne} w {rok} to {jednozdaniowa definicja/obietnica}. W tym przewodniku dostaniesz {format: checklista/9 kroków/szablon}, aby {wynik biznesowy}. Skorzystasz z {narzędzia/zasobu}, a całość zajmie {czas/poziom trudności}. Poniżej skrót kroków — pełne wyjaśnienia w sekcji 3–9.
Przykład dobrego leadu (dla tego artykułu)
On-page SEO w 2025 to uporządkowanie treści i technikaliów tak, by strona odpowiadała intencji zapytania i ładowała się bez tarcia (INP/LCP). Poniżej znajdziesz checklistę krok po kroku: od tytułu i H1, przez strukturę nagłówków, linkowanie wewnętrzne i dane strukturalne, po mikro-UX. Na końcu pobierzesz gotowy szablon do audytu każdej podstrony. Zaczynamy od tytułu i opisu — a potem przechodzimy przez 9 kluczowych punktów.
Dlaczego to działa: jest odpowiedź „co dostanę”, wplecione encje (INP/LCP, dane strukturalne), zapowiedź formatu i nawigacja.
Przykład złego leadu (czego unikać)
SEO to bardzo ważny element każdej strony internetowej. W dzisiejszych czasach konkurencja jest ogromna, dlatego należy zadbać o wiele rzeczy, by witryna była wysoko w Google.
Co jest nie tak: brak odpowiedzi, brak zakresu, same ogólniki, żadnych encji/słów kluczowych, zero wartości w 1–2 zdaniach.
Mini-podgląd (bullet preview po leadzie)
- Co sprawdzisz: Title/H1 → intencja → struktura H2/H3 → linkowanie → schema → INP/LCP → dostępność.
- Co dostaniesz: PDF-checklista + wzór opisu H1/H2 + lista szybkich testów.
Gęstość informacji — jak ją podnieść bez ściany tekstu
- Front-loaduj konkrety: definicja/obietnica → zakres → co dalej.
- Nazywaj liczby: „9 kroków”, „INP < 200 ms”, „czas wdrożenia: 30–60 min”.
- Używaj słów „nośnych” (sygnał „to jest praktyczne”): checklista, kroki, przykład, szablon, tabela, wzór.
- Odcinaj wypełniacze: „jak wszyscy wiemy…”, „w dzisiejszych czasach…”, „zawsze należy…”.
- Jedno akapicie = jedna myśl; 2–3 zdania max, potem przerwa lub bullets.
Test 15 słów (kontrola jakości leadu)
W 15 słowach powiedz, co dostanę i po co:
„Checklista on-page 2025: szybkie kroki, schemy i linkowanie — z szablonem do pobrania.”
Architektura nagłówków (H1–H3) i „answer-first”: jak budować skanowalność
Cel sekcji: ułożyć treść tak, by czytelnik w 5 sekund wiedział „gdzie co jest” i od razu zobaczył odpowiedź, zanim zanurzy się w szczegóły.
Szybka checklista
- Jedno H1 na stronę (czytelne, bez brandu).
- H2 = sekcje główne, H3 = kroki/podpunkty (nie przeskakuj poziomów; unikaj H4+).
- Answer-first pod każdym H2: 1–2 zdania „W skrócie:” albo krótkie bullets z wynikiem.
- Nazwy nagłówków → intencja: „Jak…”, „Co to jest…”, „Kroki…”, „Porównanie…”, „Checklisty…”.
- Skimmability: po każdym H2 dodaj mini listę, ramkę z „Błędy” albo „Szybki test”.
- Spójność: tytuły H2/H3 opisują wynik/krok, nie zagadkowe metafory.
- Długość: H2 do ~70 znaków; unikaj wypełniaczy (np. „Kilka słów o…”).
- SEO semantyka: w H2/H3 naturalnie pojawiają się encje i synonimy (bez upychania fraz).
„Answer-first” w praktyce (wzór do wklejenia)
## {Tytuł sekcji}
> W skrócie: {1–2 zdania z odpowiedzią/konkluzją}.
> Jeśli robisz tylko jedną rzecz – zrób {najważniejszy krok}.
### Dlaczego to ważne
{1 akapit: ryzyko/korzyść, 2–3 zdania}
### Jak to zrobić (kroki)
1) {krok}
2) {krok}
3) {krok}
### Najczęstsze błędy
- {błąd → jak naprawić}
### Szybki test (30 s)
- {jak zweryfikować efekt}
Wzorce H2/H3 (gotowe szablony)
A) Sekcja instrukcyjna (how-to)
## {Czynność} krok po kroku
> W skrócie: {efekt końcowy i kryterium sukcesu}.
### Kroki
1) {co zrobić} → {miernik}
2) {co zrobić} → {miernik}
3) {co zrobić} → {miernik}
### Błędy do uniknięcia
- …
### Checklista mini
- [ ] …
B) Sekcja definicyjna (encja/pojęcie)
## {Pojęcie}: co to jest i kiedy ma sens
> W skrócie: {jednozdaniowa definicja + kontekst użycia}.
### Dlaczego to ma znaczenie w {temat}
### Przykłady zastosowań
- …
### Granice i pułapki
- …
C) Sekcja porównawcza
## {X} vs {Y}: co wybrać przy {kontekst}
> W skrócie: {rekomendacja dla 80% przypadków} + kiedy odstąpić.
### Różnice w skrócie
- Cel | Koszt | Czas | Ryzyko
### Kiedy {X}
### Kiedy {Y}
D) Sekcja „lista kontrolna”
## Checklista: {obszar}
> W skrócie: przejdź punkty 1–7; must-have oznaczone *.
1) *{must-have}*
2) *{must-have}*
3) {nice-to-have}
…Najczęstsze błędy w nagłówkach (i szybkie poprawki)
- H2 bez odpowiedzi (sam tytuł, zero konkluzji) → dodaj linijkę „W skrócie: …”.
- Nagłówki-metafory („Na co dzień i od święta…”) → zmień na wynik („Kiedy aktualizować treść i jak często”).
- Za dużo poziomów (H4–H6) → spłaszcz do H3 i użyj list/boxów.
- Ściana tekstu pod H2 → rozbij na H3 + bullets/tabela.
- Powtórzenia fraz w wielu H2 → różnicuj angle („checklista”, „kroki”, „porównanie”, „kiedy nie”).
Struktura treści i „blokowość” (boxy, listy, tabele)
W skrócie: krótkie akapity (2–3 zdania), sensowne przerwy i powtarzalne bloki (box informacyjny, checklisty, tabele). Dzięki temu rośnie skanowalność i czas na stronie.
Dlaczego to ważne
„Blokowość” porządkuje przekaz i ułatwia szybkie znalezienie odpowiedzi. Algorytmy i użytkownicy preferują treści, które da się przeskanować w kilka sekund: jasne nagłówki, listy, podsumowania, wyróżnione wnioski.
Jak to ułożyć (kroki)
- Akapity do 2–3 zdań; po każdym H2 dodać krótkie „W skrócie: …”.
- Wyróżniać wnioski i definicje w boxach (ramki), a procesy w listach numerowanych.
- Zestawienia i porównania przedstawiać w tabelach zamiast w długich opisach.
- Co 3–5 ekranów wstawić „przystanek”: mini-podsumowanie, „Błędy do uniknięcia” lub checklistę.
- Dodać „czas czytania”, spis treści (TOC) i breadcrumbs — poprawia orientację w treści.
Wzorce bloków (do zastosowania w artykułach)
Box – definicja / meritum
Definicja: krótka, jednozdaniowa odpowiedź; poniżej 1–2 zdania kontekstu.
Kiedy stosować: na początku sekcji, aby od razu „oddać” sedno.
Checklist – szybka kontrola
- Cel sekcji jest jasny w pierwszym zdaniu
- Jest lista kroków lub tabela zamiast „ściany tekstu”
- Na końcu sekcji: 1–2 zdania wniosków albo „Szybki test”
Tabela – porównanie (mini-schemat)
| Kryterium | Opcja A | Opcja B | Kiedy wybrać |
|---|---|---|---|
| Cel | … | … | … |
| Koszt | … | … | … |
| Czas wdrożenia | … | … | … |
| Ryzyko | … | … | … |
Ramka „Błędy do uniknięcia”
- Zbyt długie akapity bez przerw → rozbić na listy/H3.
- Opisy porównań bez tabel → zamienić na tabelę 3–6 wierszy.
- Brak leadów „answer-first” → dodać 1–2 zdania konkluzji pod H2.
Szybki test (30 s)
- Po samym skanowaniu nagłówków, boxów i tabel wiadomo, co zrobić i w jakiej kolejności.
- W każdym ekranie widoczny jest element do zeskanowania (lista, box, tabela lub cytat-wniosek).
Linkowanie wewnętrzne i breadcrumbs (klaster tematyczny)
W skrócie: każda podstrona powinna linkować w górę (do filaru/huba), w bok (do „sióstr” w klastrze) i w dół (do podtematów/leafów). Na górze treści – breadcrumbs z realną hierarchią. Celem jest klik-depth ≤ 3, zero „sierot” (orphan pages).
Dlaczego to ważne
Linkowanie wewnętrzne dystrybuuje autorytet, pomaga algorytmom zrozumieć strukturę tematów (topical authority) i skraca drogę do odpowiedzi użytkownika. Breadcrumbs poprawiają nawigację, CTR w SERP (dane strukturalne) i czas na stronie.
Jak to zrobić (kroki wdrożenia)
- Zmapuj klaster: wybierz filar (hub/pillar) i 6–12 artykułów wspierających (leafy).
- Ustal rolę każdej strony: filar = przewodnik/kompendium; leafy = wąskie podtematy.
- Dodaj linki wstecz (up-links) z każdego leafa do filaru – w leadzie i w zakończeniu.
- Dodaj linki równoległe (side-links) między leafami (sekcja „Zobacz też”).
- Dodaj linki w przód (down-links) z filaru do leafów – w logicznych „blokach” tematycznych.
- Umieść link konwersyjny (np. /uslugi-seo/) w filarze i 1× na leafie (z kontekstem).
- Breadcrumbs: włącz, pokaż hierarchię: Strona główna → Kategoria → Artykuł. Ostatni element bez linku.
- QA: sprawdź, czy każda strona ma ≥ 3 linki wewnętrzne (w górę, w bok, w dół). Usuń „sieroty”.
Mini-mapa klastra (przykład dla tego artykułu)
- Filar: On-page SEO w 2025 (ta strona)
→ Leafy: Tytuł/H1, Intencja i lead, Architektura H1–H3, Linkowanie wewnętrzne i breadcrumbs, Schema/FAQ, Multimedia & alt, Szybkość LCP/INP, Aktualizacja & kanibalizacja
→ Konwersja: /uslugi-seo/ (albo /wycena/)
Matryca anchorów (praktyczny start)
- Exact match (1× / strona): „linkowanie wewnętrzne” → do filaru lub kluczowego leafa.
- Partial/synonim (1–2×): „strukturę linków w treści”, „wewnętrzne odnośniki”.
- Brand/URL (opcjonalnie 1×): „StartBlog – przewodnik on-page”.
- Nawigacyjne: „zobacz też”, „przejdź do checklisty”.
Zasada: różnicuj anchory; nie duplikuj exact-match w każdym akapicie; linkuj z kontekstu, nie z „nagiej” listy linków.
Moduły do wklejenia (blokowe linkowanie)
A) „Zobacz też” (linki równoległe)
<section class="see-also" aria-label="Zobacz też">
<h3>Zobacz też</h3>
<ul>
<li><a href="/on-page/architektura-naglowkow/">Architektura nagłówków H1–H3</a></li>
<li><a href="/on-page/schema-faq/">Dane strukturalne i FAQ</a></li>
<li><a href="/on-page/lcp-inp/">Szybkość: LCP i INP w praktyce</a></li>
</ul>
</section>
B) Link wstecz (lead lub stopka artykułu)
<p class="back-to-hub">
Ten wpis jest częścią przewodnika <a href="/on-page/">On-page SEO 2025</a>.
</p>
Breadcrumbs – zasady i schema
- Umiejscowienie: pod nagłówkiem strony, nad treścią.
- Hierarchia: Home → Kategoria/Temat → Artykuł.
- UX: długie nazwy skracać, ostatni element nieklikalny.
- SEO: dodaj schema BreadcrumbList (JSON-LD).
Przykładowe JSON-LD
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1,
"name": "Start",
"item": "https://startblog.pl/"
},
{ "@type": "ListItem", "position": 2,
"name": "SEO",
"item": "https://startblog.pl/seo/"
},
{ "@type": "ListItem", "position": 3,
"name": "On-page SEO w 2025: checklista dla każdej podstrony"
}
]
}
</script>
Najczęstsze błędy (i szybkie poprawki)
- Sieroty (orphan pages): brak linków w/na stronę → dołącz do klastra, dodaj linki w hubie i leafach.
- Przeoptymalizowane anchory: wszędzie exact match → mieszaj partial/brand/nawigacyjne.
- Linki w jednym miejscu (np. tylko stopka) → rozłóż w leadzie, środku i zakończeniu.
- Breadcrumbs bez hierarchii (np. Home → Artykuł) → dodaj poziom kategorii/tematu.
- Kanibalizacja: wiele stron linkuje do siebie na tę samą frazę i pokrywa intencję → wyznacz stronę kanoniczną tematu i linkuj do niej preferencyjnie.
Szybki test (30 s)
- Z filaru da się kliknąć do każdego leafa w 1 klik?
- Z leafa wrócę do filaru i przejdę do co najmniej 2 „sióstr”?
- Breadcrumbs pokazują 3 poziomy i ostatni nie jest linkiem?
- Głębokość: Home → … → Artykuł ≤ 3 kliknięcia?
Multimedia i dostępność (alt, transkrypcje, kontrast)
W skrócie: każde medium ma tekstowy odpowiednik (alt/figcaption/transkrypcja), jest semantycznie osadzone (figure/video/audio), nie opiera się wyłącznie na kolorze, a pliki są lekkie i stabilne wizualnie (width/height → bez CLS).
Dlaczego to ważne
Multimedia pomagają szybciej „oddać sens” treści, ale bez alternatyw tekstowych i właściwego kontrastu wykluczają część użytkowników oraz zaniżają jakość strony (UX, INP/LCP). Dobra dostępność = lepsza skanowalność, większe zaangażowanie i wyższa jakość sygnałów behawioralnych.
Jak to zrobić (kroki wdrożenia)
- Obrazy: zawsze uzupełniaj
alt(lubalt=""dla dekoracyjnych), dodawajwidthiheight, stosujloading="lazy"(poza LCP), preferuj WebP/AVIF z fallbackiem. - Infografiki/wykresy: krótki
alt+ rozszerzony opis w<figcaption>lub sekcji „Opis wykresu” linkowanej zaria-describedby. - Wideo: napisy (track), streszczenie/kluczowe punkty pod wideo, kontrolki dostępne z klawiatury.
- Audio/podcast: transkrypcja (na stronie lub jako rozwijany blok), skrót w punktach.
- Kolor i kontrast: minimum AA (tekst 4.5:1; duży 3:1). Informację przekazuj nie tylko kolorem — dodaj ikony/etykiety.
- Stabilność layoutu: atrybuty
width/heightlub CSSaspect-ratio-> brak skoków treści (CLS). - Wydajność: kompresja, odpowiednie rozmiary (
srcset/sizes), preload hero (LCP), lazy dla reszty. - Semantyka: obraz w
<figure>+<figcaption>, wideo w<video>+<track>. Nie nadużywaj ARIA, jeśli HTML ma natywny element.
Checklista – obrazy (odhacz przed publikacją)
altoddaje funkcję obrazu (nie: „obrazek1”).- Dekoracyjne:
alt=""i ewentualnierole="presentation". widthiheightobecne; brak skoków layoutu.loading="lazy"(poza najważniejszym obrazem LCP).srcset+sizesdla responsywności; WebP/AVIF + fallback.- Podpis/
<figcaption>tam, gdzie obraz niesie merytorykę.
Checklista – wideo i audio
- Napisy (
<track kind="captions">) dla wideo. - Transkrypcja audio/wideo i krótki konspekt.
- Kontrolki dostępne klawiaturą; focus ma wyraźny styl.
- Autoodtwarzanie wyłączone (szczególnie z dźwiękiem).
- Plik skompresowany, właściwa rozdzielczość (bez oversize).
Checklista – kolor/kontrast
- Tekst: min. 4.5:1 (zwykły) / 3:1 (≥ 18 px bold / ≥ 24 px normal).
- Linki i stany (hover/focus) różnią się nie tylko kolorem (np. podkreślenie, ikona).
- Ikony statusu mają etykietę tekstową lub
aria-label.
Szablony i przykłady (kopiuj-wklej)
A) Obraz merytoryczny (z opisem i stabilnym miejscem)
<figure>
<img
src="/media/lcp-hero.webp"
alt="Schemat on-page SEO: od tytułu przez nagłówki po linkowanie"
width="1200" height="630"
fetchpriority="high">
<figcaption>Rys. 1. Mapa on-page: kolejność kroków od metadanych do schema.</figcaption>
</figure>
B) Obraz dekoracyjny (bez hałasu dla czytników)
<img src="/media/ornament.svg" alt="" role="presentation" width="200" height="200" loading="lazy">
C) Obraz responsywny (srcset + sizes)
<img
src="/media/checklista-800.webp"
srcset="/media/checklista-400.webp 400w, /media/checklista-800.webp 800w, /media/checklista-1200.webp 1200w"
sizes="(max-width: 640px) 100vw, 640px"
alt="Checklista on-page SEO do wydruku"
width="800" height="600" loading="lazy">
D) Wideo z napisami i skrótem
<figure>
<video width="800" height="450" controls preload="metadata">
<source src="/media/onpage-2025.mp4" type="video/mp4">
<track kind="captions" src="/media/onpage-2025-pl.vtt" srclang="pl" label="Polski">
</video>
<figcaption>
Wideo: 6-minutowy skrót checklisty. Kluczowe punkty: tytuł/H1, TOC, linkowanie, schema, INP.
</figcaption>
</figure>
E) Infografika z dłuższym opisem (ARIA)
<figure aria-describedby="opis-wykresu">
<img src="/media/wykres-inp.webp" alt="Wykres INP: spadek do 180 ms po optymalizacji" width="900" height="540" loading="lazy">
<figcaption>Wykres: wpływ optymalizacji JS na INP.</figcaption>
</figure>
<section id="opis-wykresu" class="visually-hidden">
Po wdrożeniu odchudzenia skryptów i opóźnienia widgetów, INP spadł z 320 ms do 180 ms.
</section>
F) Styl „visually-hidden” (przydatny do długich opisów)
.visually-hidden{
position:absolute!important; width:1px; height:1px;
padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); border:0;
}
Najczęstsze błędy (i szybkie poprawki)
- Alt jako opis pliku („IMG_1234”) → napisz funkcję/wniosek obrazu.
- Brak
width/height→ dodaj wartości źródła; jeśli dynamiczne, użyjaspect-ratio. - Wideo bez napisów → dorzuć
.vtt; w minimum – streszczenie pod filmem. - Informacja tylko kolorem (np. czerwony = błąd) → dodaj ikonę/etykietę.
- Ogromne pliki (5–10 MB obrazka) → eksport WebP/AVIF, kompresja, realny rozmiar wyświetlania.
- Lazy na hero (LCP) → dla pierwszego obrazu użyj
fetchpriority="high"i nie dodawajloading="lazy".
Dane strukturalne (schema) i FAQ dopasowane do tematu
W skrócie: na tej stronie powinny działać co najmniej trzy schematy –
Article,BreadcrumbListi (jeśli masz sekcję pytań)FAQPage. Wstawiaj tylko to, co jest faktycznie widoczne w treści, unikaj duplikatów z wtyczek i dbaj o spójność z kanonicznym adresem URL.
Dlaczego to ważne
Schema pomaga wyszukiwarkom zrozumieć kto, co, kiedy i dla kogo. Poprawia interpretację tematu (encje), może zwiększać CTR (breadcrumbs w SERP) i ułatwia łączenie treści w klastrach.
Jak to zrobić (kroki wdrożenia)
- Article: opisuje artykuł (tytuł, opis, autor, daty, obrazek hero).
- BreadcrumbList: odzwierciedla okruszki (Start → Kategoria → Artykuł).
- FAQPage: tylko jeśli na stronie jest realna sekcja Q&A.
- Spójność pól:
headline≈ H1,description≈ meta description,image= hero. - Unikaj duplikatów: jeśli wtyczka już generuje
ArticleiBreadcrumbList, dodaj wyłącznieFAQPage. - Walidacja: sprawdź poprawność w narzędziu testowym (brak błędów, ostrzeżeń minimalnie).
„Pakiet startowy” JSON-LD (do <head>). Podmień URL-e i pola.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"@id": "https://startblog.pl/seo/on-page-seo-checklista-2025/#article",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://startblog.pl/seo/on-page-seo-checklista-2025/"
},
"headline": "On-page SEO w 2025: checklista dla każdej podstrony",
"description": "Praktyczna checklista on-page: tytuł, H1, intencja, nagłówki, linkowanie wewnętrzne, schema, multimedia i INP/LCP. Z szablonem do pobrania.",
"image": {
"@type": "ImageObject",
"url": "https://startblog.pl/wp-content/uploads/2025/09/onpage-hero.webp",
"width": 1200,
"height": 630
},
"author": {
"@type": "Person",
"name": "StartBlog",
"url": "https://startblog.pl/o-nas/"
},
"publisher": {
"@type": "Organization",
"name": "StartBlog",
"logo": {
"@type": "ImageObject",
"url": "https://startblog.pl/wp-content/uploads/brand/startblog-logo-180x180.png",
"width": 180,
"height": 180
}
},
"datePublished": "2025-09-07",
"dateModified": "2025-09-07",
"articleSection": "SEO",
"inLanguage": "pl-PL"
},
{
"@type": "BreadcrumbList",
"@id": "https://startblog.pl/seo/on-page-seo-checklista-2025/#breadcrumbs",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Start",
"item": "https://startblog.pl/"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://startblog.pl/seo/"
},
{
"@type": "ListItem",
"position": 3,
"name": "On-page SEO w 2025: checklista dla każdej podstrony"
}
]
},
{
"@type": "FAQPage",
"@id": "https://startblog.pl/seo/on-page-seo-checklista-2025/#faq",
"mainEntity": [
{
"@type": "Question",
"name": "Czy w tytule zawsze dodawać rok (np. 2025)?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Tylko wtedy, gdy treść jest realnie zaktualizowana. Rok może podnieść CTR, ale nie zastąpi jakości i zgodności z intencją."
}
},
{
"@type": "Question",
"name": "Ile H1 powinien mieć artykuł?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Jedno H1. Struktura poniżej to H2 dla sekcji i H3 dla kroków; unikaj przeskakiwania poziomów."
}
},
{
"@type": "Question",
"name": "Jak dobrać słowa kluczowe pod on-page?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Najpierw określ intencję (how-to, definicja, porównanie). Użyj frazy głównej w Title/H1 oraz 2–3 powiązanych encji w leadzie i nagłówkach."
}
},
{
"@type": "Question",
"name": "Czy FAQ na stronie zawsze warto oznaczać schema FAQPage?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Tak, jeśli sekcja Q&A realnie istnieje i odpowiada na częste pytania. Unikaj sztucznego nadmuchiwania pytań bez wartości."
}
},
{
"@type": "Question",
"name": "Jakie obrazy wpływają na LCP/INP?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Głównie obraz hero (LCP). Dodaj wymiary, użyj WebP/AVIF, `fetchpriority=\"high\"` i nie ustawiaj `loading=\"lazy\"` na pierwszym obrazie."
}
},
{
"@type": "Question",
"name": "Jak linkować wewnętrznie w klastrze?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Każdy „leaf” linkuje w górę do filaru i w bok do 2–3 „sióstr”. Filar linkuje w dół do wszystkich leafów."
}
}
]
}
]
}
</script>
Uwaga: jeśli korzystasz z Yoast/RankMath, najczęściej mają już
ArticleiBreadcrumbList. Wtedy wklej tylko blokFAQPage(obiekt z@type: FAQPage) – unikniesz duplikacji.
Najczęstsze błędy (i poprawki)
- Niespójne pola:
headline≠ H1 lubdescription≠ meta → ujednolicić. - Obrazy bez wymiarów: brak
width/height→ dodać (stabilność layoutu). - FAQ bez treści na stronie: schema bez widocznej sekcji → dodać realny blok Q&A lub usunąć schema.
- Duplikaty z wtyczek i szablonu: dwa
Article/BreadcrumbList→ zostawić jeden, drugi wyłączyć. - Złe adresy:
@idimainEntityOfPagenie wskazują kanonicznego URL → poprawić na finalny adres.
Szybkość i UX: LCP/INP w praktyce (obrazy, fonty, JS)
W skrócie: LCP (Largest Contentful Paint) ma być ≤ 2,5 s na mobile, INP (Interaction to Next Paint) ≤ 200 ms. Osiągasz to, ustawiając priorytety pobierania (hero, CSS, fonty), odchudzając JS i stabilizując layout (width/height,
aspect-ratio).
Dlaczego to ważne
Szybkość ładowania i reakcji to dziś podstawowe sygnały jakości. Google mierzy realne doświadczenia użytkowników; wolny LCP i „lepkie” interakcje (INP) obniżają widoczność i konwersję.
Jak to zrobić (kroki wdrożenia)
A) Obrazy (LCP najczęściej = hero)
- Nie używaj
loading="lazy"na LCP. - Dodaj
fetchpriority="high"do hero i zawsze ustawwidth/height(alboaspect-ratio). - Używaj WebP/AVIF +
srcset/sizes; kompresuj realnie do wymiarów wyświetlania. - Dla pozostałych obrazów:
loading="lazy",decoding="async". - Zarezerwuj miejsce pod embedami/banerami (brak CLS).
B) Fonty
- Preload krytycznych WOFF2 (tylko potrzebne grubości / subsety).
font-display: swap/optionalaby uniknąć FOIT; rozważ system stack dla UI.- Samohostuj fonty; ogranicz liczbę rodzin/odmian.
C) CSS
- Critical CSS inline (tylko above-the-fold); resztę ładuj asynchronicznie.
- Porządkuj kaskadę: mniej plików, bez zbędnych frameworków.
- Unikaj „ciężkich” efektów wpływających na layout na starcie.
D) JS i third-party (INP)
defer/type="module"dla własnych skryptów; async dla zewnętrznych, jeśli nie zależą od kolejności.- Podziel kod: ładuj na żądanie (
import()po kliknięciu/scrollu). - Odkładaj wszystko, co nie jest krytyczne (analytics, czaty, widgety) do
requestIdleCallbacklub poload. - Używaj passive event listeners i unikaj długich zadań >50 ms (dziel je).
- Preferuj CSS transform/opacity zamiast właściwości powodujących relayout.
E) Stabilność layoutu (CLS)
- Zawsze podawaj
width/heightlubaspect-ratio. - Rezerwuj miejsce na reklamy/embed (
contain-intrinsic-size, placeholder). - Nie wstrzykuj dynamicznie nad treścią elementów bez rezerwacji miejsca.
Snippety „kopiuj-wklej”
1) Hero (LCP) – poprawny markup
<figure>
<img
src="/media/onpage-hero-1200.webp"
srcset="/media/onpage-hero-800.webp 800w, /media/onpage-hero-1200.webp 1200w, /media/onpage-hero-1600.webp 1600w"
sizes="(max-width: 800px) 100vw, 800px"
alt="Schemat on-page SEO 2025: kroki od tytułu po schema"
width="1200" height="630"
fetchpriority="high">
<figcaption>Hero: największy element nad zgięciem – bez lazy, z priorytetem pobierania.</figcaption>
</figure>
2) Obrazki niekrytyczne (poza viewportem)
<img
src="/media/box-przyklad-600.webp"
alt="Przykład boksu z checklistą"
width="600" height="400"
loading="lazy" decoding="async">
3) Preload i samohostowane fonty (WOFF2)
<link rel="preload" href="/fonts/Inter-Variable.woff2" as="font" type="font/woff2" crossorigin>
<style>
@font-face{
font-family: "Inter";
src: url("/fonts/Inter-Variable.woff2") format("woff2");
font-weight: 100 900;
font-display: swap; /* lub optional */
}
html{ font-family: "Inter", system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, sans-serif; }
</style>
4) Asynchroniczne ładowanie CSS poza krytycznym
<link rel="preload" href="/css/noncritical.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/css/noncritical.css"></noscript>
5) Własne skrypty – defer/type="module"
<script type="module" src="/js/app.js"></script>
<!-- lub -->
<script defer src="/js/app.legacy.js"></script>
6) Odkładanie niekrytycznych integracji
<script>
(function(){
const runIdle = cb => ('requestIdleCallback' in window) ? requestIdleCallback(cb, {timeout: 2000}) : setTimeout(cb, 800);
// załaduj analytics/heatmapy po bezczynności
runIdle(() => {
const s = document.createElement('script');
s.src = 'https://example-analytics.js'; s.async = true;
document.head.appendChild(s);
});
// ładuj cięższy widget dopiero po interakcji
const onFirstInteract = () => {
import('/js/widget-chat.js');
removeEventListener('pointerdown', onFirstInteract);
removeEventListener('keydown', onFirstInteract);
};
addEventListener('pointerdown', onFirstInteract, {passive: true});
addEventListener('keydown', onFirstInteract);
})();
</script>
7) Lite embed YouTube (klik-to-load)
<button class="yt-lite" data-id="dQw4w9WgXcQ" aria-label="Odtwórz film">▶ Odtwórz</button>
<script>
document.addEventListener('click', e => {
const b = e.target.closest('.yt-lite'); if(!b) return;
const id = b.dataset.id;
b.outerHTML = `<iframe width="560" height="315"
src="https://www.youtube.com/embed/${id}?autoplay=1"
title="YouTube video" loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>`;
});
</script>
8) Rezerwacja miejsca dla sekcji poniżej zgięcia
.lazy-section{
content-visibility: auto;
contain-intrinsic-size: 800px; /* szacowana wysokość do czasu wyrenderowania */
}
Najczęstsze błędy (i szybkie poprawki)
- Lazy na hero → usuń
loading="lazy", dodajfetchpriority="high". - Brak wymiarów obrazów → uzupełnij
width/heightlub użyjaspect-ratio. - Za dużo fontów → jeden wariant zmiennej rodziny (variable), ogranicz do 2–3 „weight axes”.
- Third-party w
<head>bez opóźnienia → przenieś dodefer/async/idle, ładuj po interakcji. - Monolityczny bundle JS → podział i ładowanie na żądanie; usuń martwy kod.
- Animacje zmieniające layout → używaj
transform/opacity.
Podsumowanie i końcowa checklista (do odhaczenia przed publikacją)
W skrócie: dopasuj tytuł/H1 do intencji, potwierdź odpowiedź w pierwszych 100 słowach, zbuduj skanowalną strukturę (H2/H3 + „W skrócie”), podepnij klaster linkami, zadbaj o multimedia/a11y, oznacz schema i dowieź LCP/INP. Publikuj dopiero po szybkim teście QA.
Jednostronicowa checklista on-page 2025
A. Tytuł, opis, H1
- Title z frazą na początku + obietnica formatu/wyniku
- H1 jednoznaczne (bez brandu) i spójne z Title
- Meta description: wynik + USP + miękkie CTA
- Długość: Title ~50–62 zn., Description ~150–160 zn.
B. Intencja i lead (pierwsze 100 słów)
- Jednoznaczny typ intencji (how-to/definicja/porównanie/lokalne)
- Answer-first: w 1–2 zdaniach „co dostanę”
- Fraza główna + 1–2 encje wplecione naturalnie
C. Architektura H1–H3 i skanowalność
- 1× H1; H2 = sekcje, H3 = kroki
- Pod każdym H2 krótki blok „W skrócie:”
- Brak przeskoków poziomów; brak „pustych” H2
D. Struktura i „blokowość”
- Akapity 2–3 zdania, listy i tabele zamiast „ściany tekstu”
- Boxy: definicja / błędy / szybki test w każdej większej sekcji
- TOC, czas czytania, breadcrumbs widoczne nad treścią
E. Linkowanie wewnętrzne i breadcrumbs
- Link „w górę” do filaru, „w bok” do 2–3 „sióstr”, „w dół” z filaru do leafów
- ≥ 3 linki wewnętrzne na stronę; zero sierot
- Anchory zróżnicowane (exact/partial/brand/nawigacyjne)
- Breadcrumbs z realną hierarchią (ostatni element nieklikalny)
F. Multimedia i dostępność
- Alt adekwatny (lub
alt=""dla dekoracyjnych) width/height(lubaspect-ratio) dla wszystkich obrazów- WebP/AVIF +
srcset/sizes; napisy do wideo, transkrypcje do audio - Kontrast min. AA; stany linków nie tylko kolorem
G. Schema (dane strukturalne)
Article+BreadcrumbList;FAQPagetylko, jeśli Q&A jest w treściheadline≈ H1,description≈ meta; poprawne kanoniczne URL-e- Brak duplikatów z wtyczek/tematu
H. Szybkość i UX (LCP/INP/CLS)
- LCP ≤ 2,5 s mobile; obraz hero bez
loading="lazy", zfetchpriority="high" - INP ≤ 200 ms: skrypty
defer/module, odkładanie third-party, brak długich zadań >50 ms - CLS ~0.00–0.05: zarezerwowane miejsca, brak skoków layoutu
I. QA i publikacja
- Test 5-sekundowego skanu: po samych H2/H3 wiadomo „co i jak”
- Kontrola kanibalizacji: czy to jedyna strona dla tej intencji?
- Linki z innych kluczowych stron już prowadzą do tej (aktualizacja „hubu”)
- Data aktualizacji uzupełniona; ostatni rzut oka w mobilnym widoku
FAQ — On-page SEO 2025
Czy w tytule zawsze dodawać rok (np. 2025)?
Nie zawsze. Rok dodaj tylko wtedy, gdy treść faktycznie zaktualizowano. Najpierw zgodność z intencją i obietnicą formatu.
Ile H1 może mieć strona i jak ustawić H2/H3?
Jedno H1 na stronę. H2 to sekcje główne, H3 to kroki/podpunkty. Unikaj przeskakiwania poziomów i dodaj krótkie „W skrócie:” pod każdym H2.
Czy istnieje idealna długość tekstu dla on-page?
Nie ma jednej liczby słów. Liczy się gęstość informacji i pełne pokrycie intencji. Lepiej krócej i konkretnie niż dłużej „na watę”.
Jak używać słów kluczowych i encji w 2025?
Fraza główna w Title/H1 i leadzie. Dalej 2–3 powiązane encje/synonimy w nagłówkach i akapitach. Bez upychania exact-match.
Co to znaczy „answer-first” i gdzie je umieścić?
1–2 zdania pod H2, które od razu dają odpowiedź lub wniosek. Ułatwia skanowanie i obniża pogo-sticking.
Jak poprawnie linkować wewnętrznie (klaster)?
Leaf → link w górę do filaru + w bok do 2–3 „sióstr”. Filar → link w dół do wszystkich leafów. Różnicuj anchory: exact, partial, brand, nawigacyjne.
Czy spis treści (TOC) pomaga w SEO?
Pośrednio przez UX. Daje lepszą skanowalność i nawigację. Umieszczaj wysoko, ale nie zasłaniaj leadu.
Jakie dane strukturalne dodać na takiej stronie?
Minimum: Article i BreadcrumbList. Jeśli masz sekcję pytań — także FAQPage. Oznaczaj tylko to, co jest na stronie.
Obrazy a LCP: lazy czy fetchpriority?
Hero (LCP) bez lazy, z atrybutem fetchpriority=’high’ i ustawionymi wymiarami. Pozostałe obrazy: loading=’lazy’ i decoding=’async’.
Jak zejść z INP poniżej 200 ms?
Odkładaj third-party, używaj defer/module, dziel długie zadania JS, ładuj ciężkie widgety po interakcji i animuj transform/opacity.
Ile fontów i jak je ładować?
Minimum rodzin/odmian. Samohostowane WOFF2, preload krytycznych plików i font-display: swap (lub optional). System stack dla UI mile widziany.
Co z kanibalizacją i kanonicznymi?
Jedna intencja = jedna strona kanoniczna. Duplikaty scalaj (301/noindex) albo zawężaj. Linkuj preferencyjnie do wersji docelowej.
Jak często aktualizować treść?
Gdy zmienia się intencja, dane lub standardy (np. CWV). Przegląd co 3–6 miesięcy: liczby, zrzuty, linki, sekcja „co nowego”.
Jak mierzyć efekt zmian on-page?
GSC: pozycje, CTR, zapytania. CWV: LCP/INP/CLS (field data). UX/konwersje: czas, scroll, CPA/CAC, jakość leadów.
Czy on-page dla lokalnego SEO różni się?
Fundamenty te same, ale dodaj NAP, dane lokalne, link do Google Business Profile i sekcję pytań lokalnych. Optymalizuj frazy z geolokalizacją.




