StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Doradztwo produktowe

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Doradztwo produktowe

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Doradztwo produktowe

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

RealizacjeO mnieBlog
Porozmawiajmy
PL
EN

Nowoczesne strony internetowe dla firm, które myślą odważnie.

Przewiń do góry

Nazwa

StriveLab Maciej Sala

NIP

6772218995

REGON

524008527

E-mail

contact@strivelab.pl

Usługi główne
  • Tworzenie stron internetowych
  • Strony internetowe Next.js
  • Strony internetowe Astro
  • Strony internetowe React
Inne usługi
  • Usługi
  • SEO & Performance Sprint
  • QA & Stabilizacja
  • Konsultacje Product / Delivery
  • Automatyzacja Procesów AI
  • Aplikacje webowe Next.js
  • Współpraca ciągła
Strony
  • O mnie
  • Usługi
  • Realizacje
  • Blog

© 2026 StriveLab.pl

Polityka prywatności
Next.jsWordPressSEO

Migracja z WordPress do Next.js — redirecty 301 i pozycje SEO

Jak przenieść stronę z WordPress na Next.js bez utraty pozycji w Google? Eksport treści, mapowanie URL, redirecty 301, migracja obrazów i weryfikacja indeksacji.

OpublikujLinkedInFacebookWyślij
Autor
Maciej Sala
Opublikowano
11 kwietnia 2026 10:50
Czytanie
4 min czytania
Aktualizacja
25 maja 2026 10:55

Migracja na Next.js wygląda jak czysto techniczna decyzja — a potrafi w jeden weekend skasować to, co budowałeś w Google przez lata. Każdy adres URL, który dziś przyciąga ruch, to kapitał, który algorytm przypisał do konkretnej strony. Przeniesiesz treść bez planu — i ten kapitał wyparuje, zanim zdążysz zauważyć spadek w analityce. Ten przewodnik pokazuje, jak przejść na Next.js i zatrzymać każdą pozycję, na którą zapracowałeś.

Artykuł w skrócie

  • Audit przed migracją — wyeksportuj zaindeksowane URL-e z GSC i stwórz pełną mapę redirectów 301 zanim przeniesiesz pierwszą stronę.
  • Redirecty 301 są obowiązkowe — bez przekierowań każda strona WordPressa traci zebrany swoją moc i pozycje w Google po migracji.
  • Treść migrowana skryptem — WP-CLI eksportuje posty do JSON; parser zamienia bloki Gutenberga na MDX i usuwaja zbędny markup.
  • Obrazy wymagają osobnej migracji — next/image z lokalnym storage lub CDN zamiast /wp-content/uploads; URL-e mediów też muszą przekierować.
  • Monitoring po migracji — tygodniowe śledzenie GSC (indeksacja, Coverage, Performance) przez co najmniej 3 miesiące po przejściu.

Co decyduje o tym, czy migracja zachowa SEO

Migracja z WordPress na Next.js to dobra i przyszłościowa inwestycja — szybsza strona, lepsze Core Web Vitals, zmniejszenie ryzyka narażenia na ataki i pełna kontrola nad kodem. O tym, czy zachowasz pozycje w Google, decyduje przemyślany, dobry plan SEO. Z dobrym planem przejście jest niemal niewidoczne dla wyszukiwarki, a bez niego ryzykujesz to, na co pracowałeś latami.

Cały ciężar spoczywa na URL-ach, które Google zaindeksował, przypisał im autorytet i rankuje na konkretne frazy. Zabezpieczysz je — migracja jest niewidoczna dla algorytmu. Pominiesz je — konsekwencje są cztery:

  • utracone pozycje — Google widzi nowe URL-e jako nowe strony, bez wieloletniej historii,
  • błędy 404 — stare adresy przestają działać,
  • utratę backlinków — linki zewnętrzne prowadzą donikąd,
  • spadek ruchu organicznego na tygodnie lub długie miesiące.
Uwaga

Przy migracji SEO najpierw zabezpiecz stare URL-e, a dopiero potem dopracowuj frontend. Nawet świetna nowa strona nie odzyska szybko ruchu, jeśli przekierowania 301, canonicale i mapa treści będą niekompletne.

Migracja krok 1: Inwentaryzacja tego co aktualnie masz w WordPress

Przed migracją zrób pełną, dokładną listę zaindeksowanych stron:

Code
# Pobierz wszystkie zaindeksowane URL-e z Google Search Console
# GSC → Performance → Pages → Eksportuj do CSV
 
# Lub użyj screaming frog / sitemap
curl -s https://twoj-wordpress.pl/sitemap_index.xml

Następnie stwórz arkusz z czterema kolumnami: stary URL, nowy URL, status (migruj/Redirect 301 to stałe przekierowanie informujące przeglądarkę i wyszukiwarki, że zasób został trwale przeniesiony pod nowy adres./usuń) oraz priorytet (ruch organiczny).

Migracja krok 2: Eksport treści z WordPress

Code
# WP-CLI — eksport do JSON (najlepsze do programowej migracji)
wp post list --post_type=post --format=json --fields=ID,post_title,post_name,post_content,post_date,post_excerpt > posts.json
wp post list --post_type=page --format=json --fields=ID,post_title,post_name,post_content > pages.json
 
# Eksport mediów
wp media list --format=json --fields=ID,guid,post_title,alt_text > media.json

Alternatywą jest użycie WordPress REST API to interfejs udostępniający dane przez standardowe metody HTTP (GET, POST...) pod adresami zasobów — w WordPressie domyślnie pod /wp-json/.:

Code
// scripts/export-wordpress.ts
async function exportPosts() {
  let page = 1
  let allPosts: any[] = []
 
  while (true) {
    const res = await fetch(
      `https://twoj-wordpress.pl/wp-json/wp/v2/posts?per_page=100&page=${page}&_embed`,
    )
 
    if (!res.ok) break
 
    const posts = await res.json()
    if (posts.length === 0) break
 
    allPosts = [...allPosts, ...posts]
    page++
  }
 
  // Zapisz do pliku
  const fs = require('fs')
  fs.writeFileSync('wordpress-posts.json', JSON.stringify(allPosts, null, 2))
  console.log(`Wyeksportowano ${allPosts.length} postów`)
}

Migracja krok 3: Konwersja treści na MDX (lub import do CMS)

Code
// scripts/convert-to-mdx.ts
import TurndownService from 'turndown'
import fs from 'fs'
import path from 'path'
 
const turndown = new TurndownService({
  headingStyle: 'atx',
  codeBlockStyle: 'fenced',
})
 
interface WPPost {
  title: { rendered: string }
  slug: string
  content: { rendered: string }
  excerpt: { rendered: string }
  date: string
  _embedded?: {
    'wp:featuredmedia'?: [{ source_url: string; alt_text: string }]
    'wp:term'?: [{ name: string }[]]
  }
}
 
function convertPost(post: WPPost): string {
  const tags = post._embedded?.['wp:term']?.[0]?.map((t) => t.name) || []
  const image = post._embedded?.['wp:featuredmedia']?.[0]?.source_url || ''
  const excerpt = post.excerpt.rendered.replace(/<[^>]*>/g, '').trim()
 
  // Konwersja HTML → Markdown
  const content = turndown.turndown(post.content.rendered)
 
  // Frontmatter MDX
  const frontmatter = `---
title: '${post.title.rendered.replace(/'/g, "\\'")}'
description: '${excerpt.slice(0, 160)}'
datePublished: '${post.date}'
author: 'Maciej Sala'
tags: [${tags.map((t) => `'${t}'`).join(', ')}]
---`
 
  return `${frontmatter}\n\n${content}`
}
 
// Konwertuj wszystkie posty
const posts: WPPost[] = JSON.parse(
  fs.readFileSync('wordpress-posts.json', 'utf-8'),
)
 
for (const post of posts) {
  const mdx = convertPost(post)
  const filePath = path.join('content/blog', `${post.slug}.mdx`)
  fs.writeFileSync(filePath, mdx)
}
 
console.log(`Skonwertowano ${posts.length} postów do MDX`)

Migracja krok 4: Mapowanie URL-i i redirecty 301

Kluczowym zadaniem jest zapewnienie, że każdy stary URL ma swój odpowiednik w nowej witrynie, dlatego jeśli jest taka możliwość - zachowaj strukturę URL. Jeśli zmiany nie da się uniknąć, musisz skonfigurować przekierowania 301 (permanent redirect) ze starych adresów na nowe.

Code
// Typowe mapowanie WordPress → Next.js
const urlMap: Record<string, string> = {
  // WordPress domyślne
  '/wp-admin': null, // Nie przekierowuj
  '/wp-login.php': null, // Nie przekierowuj
  '/feed': '/blog/rss.xml', // RSS
 
  // Struktury permalink
  // WordPress: /2024/01/moj-post/ → Next.js: /blog/moj-post
  // WordPress: /kategoria/nazwa/ → Next.js: /blog?tag=nazwa
}
Code
// next.config.ts
const nextConfig = {
  async redirects() {
    return [
      // Redirect WordPress permalink structure
      {
        source: '/:year(\\d{4})/:month(\\d{2})/:slug',
        destination: '/blog/:slug',
        permanent: true, // 301
      },
      // Redirect category pages
      {
        source: '/category/:slug',
        destination: '/blog?tag=:slug',
        permanent: true,
      },
      // Redirect tag pages
      {
        source: '/tag/:slug',
        destination: '/blog?tag=:slug',
        permanent: true,
      },
      // Redirect feed
      {
        source: '/feed',
        destination: '/blog/rss.xml',
        permanent: true,
      },
      // WordPress artifacts
      {
        source: '/wp-content/:path*',
        destination: '/images/:path*', // Jeśli przeniosłeś media
        permanent: true,
      },
      // Konkretne strony z innym URL
      {
        source: '/o-nas',
        destination: '/o-mnie',
        permanent: true,
      },
    ]
  },
}

Migracja krok 5: Migracja obrazów

Code
// scripts/download-images.ts
import fs from 'fs'
import path from 'path'
 
const media: { guid: string; post_title: string }[] = JSON.parse(
  fs.readFileSync('media.json', 'utf-8'),
)
 
async function downloadImage(url: string, filename: string) {
  const res = await fetch(url)
  const buffer = await res.arrayBuffer()
  const outputPath = path.join('public/images/blog', filename)
  fs.writeFileSync(outputPath, Buffer.from(buffer))
}
 
async function migrateImages() {
  for (const item of media) {
    const url = item.guid
    const filename = path.basename(new URL(url).pathname)
 
    try {
      await downloadImage(url, filename)
      console.log(`✓ ${filename}`)
    } catch {
      console.error(`✗ ${filename}`)
    }
  }
}

Po pobraniu kolejny krok to zaktualizowanie lokalnych linków do obrazków w MDX to format Markdown rozszerzony o komponenty JSX, dzięki czemu w treści można używać interaktywnych lub niestandardowych komponentów.:

Code
# Zamień stare URL-e mediów na lokalne ścieżki
sed -i 's|https://twoj-wordpress.pl/wp-content/uploads/|/images/blog/|g' content/blog/*.mdx

Migracja krok 6: Weryfikacja przed przełączeniem

Lista działań do odchaczenia przed przełączeniem:

  • Każdy stary URL posiada redirect 301 lub odpowiednik w nowej strukturze

  • Sitemap zawiera wszystkie zmigrowane strony
  • Meta tagi (title, description) są poprawnie zachowane z WordPressa

  • Obrazy zostały przeniesione i są dostępne
  • Schema.org / JSON-LD to format zapisu danych strukturalnych, który pomaga wyszukiwarkom lepiej zrozumieć treść strony. zostały poprawnie zachowane lub odtworzone

  • Canonical URL-e są poprawne
  • robots.txt nie blokuje ważnych ścieżek
  • Google Search Console zostało poprawnie zweryfikowane na nowej stronie

Krok 7: Przełączenie i monitoring

  1. Pierwszym krokiem jest wdrożenie nowej strony Next.js,
  2. Następnie przekieruj domenę na nowy hosting,
  3. Sprawdź redirecty (curl -I stare-url → 301 → nowy-url),
  4. Zgłoś nową sitemap w Google Search Console,
  5. Użyj URL Inspection na kluczowych stronach,
  6. Monitoruj uważnie ruch w GA4, czyli Google Analytics 4, to aktualna wersja platformy analitycznej Google do pomiaru zdarzeń i zachowań użytkowników. przez 4-6 tygodni.

Spadek ruchu o 10–20% w pierwszym tygodniu jest normalny — Google musi przeindeksować nową strukturę. Sytuacja stabilizuje się w ciągu kolejnych 2–6 tygodni.

Werdykt Labu

Migracja z WordPressa do Next.js musi opierać się na dobrym planie: eksport treści, mapowanie URL-i, redirecty 301, migracja obrazów, monitoring indeksacji. Żaden stary URL nie może zwrócić błędu 404 — każdy musi mieć redirect lub odpowiednik w nowej strukturze. Po migracji mogą pojawić się przejściowe spadki ruchu — to normalne. W dłuższym horyzoncie nadrobisz te straty i uzyskasz wydajność, której WordPress nigdy by Ci nie dał.

Google Search Console to Twoje oczy po migracji. Monitoruj indeksację, błędy crawlowania i ruch organiczny — szczególnie w pierwszych tygodniach, gdy algorytm weryfikuje nową strukturę. Czas zainwestowany w solidne przygotowanie zwraca się już przy pierwszym, głębszym porównaniu ruchu sprzed i po migracji.

  • Co decyduje o tym, czy migracja zachowa SEO1 min
  • Migracja krok 1: Inwentaryzacja tego co aktualnie masz w WordPress1 min
  • Migracja krok 2: Eksport treści z WordPress1 min
  • Migracja krok 3: Konwersja treści na MDX (lub import do CMS)1 min
  • Migracja krok 4: Mapowanie URL-i i redirecty 3011 min
  • Migracja krok 5: Migracja obrazów1 min
  • Migracja krok 6: Weryfikacja przed przełączeniem1 min
  • Werdykt Labu1 min

Często zadawane pytania

Źródła i data weryfikacjiZweryfikowano: 20 maja 2026

Wytyczne dotyczące redirectów 301, migracji witryn, sitemap i monitoringu indeksacji zweryfikowano na podstawie dokumentacji Google Search Central oraz Next.js:

Google Search Central — Site moves with URL changes, Google — Redirects and Google Search, Google — Sitemaps overview, Google Search Console, Next.js — Redirects in next.config.js, Next.js — Middleware, WordPress REST API.

Seria

Next.js i SEO techniczne
Część 5 / 5
  1. 1Next.js a SEO — kiedy naprawdę daje przewagę nad zwykłym Reactem
  2. 2Next.js Sitemap i robots.txt — automatyczna generacja z App Routera
  3. 3Hreflang i canonical w Next.js — SEO wielojęzycznych stron bez duplikacji
  4. 4Google Search Console + Next.js — indeksacja, błędy, performance i co z nimi robić
  5. Migracja z WordPress do Next.js — redirecty 301 i pozycje SEO
Maciej Sala

O autorze

Maciej Sala

Maciej Sala — project manager i frontendowiec z doświadczeniem w marketingu internetowym. Na co dzień pracuję z Reactem, Next.js i TypeScriptem, łącząc perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat związany z branżą gier wideo jako project manager i game designer.

Absolwent historii na Uniwersytecie Jagiellońskim i studiów podyplomowych z marketingu internetowego na Akademii Górniczo-Hutniczej w Krakowie. Poza pracą trenuje na siłowni, maluje figurki i realizuje własne projekty.

Moje artykułyWięcej o mnie

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną

Biblioteka wiedzy

Czytaj dalej

Zobacz więcej wpisów
Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google
Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google

Kompletny przewodnik po migracji bloga z WordPress na Astro. Eksport przez REST API i WXR, mapowanie URL, przekierowania 301, migracja obrazów do astro:assets i monitoring pozycji w Google.

Maciej Sala

Maciej Sala

Founder Strivelab

24 kwietnia 2026
Google Search Console + Next.js — indeksacja, błędy, performance i co z nimi robić
Google Search Console + Next.js — indeksacja, błędy, performance i co z nimi robić

Jak korzystać z Google Search Console dla strony Next.js? Weryfikacja, sitemap, indeksacja, Core Web Vitals, crawl budget i najczęstsze problemy — praktyczny poradnik.

Maciej Sala

Maciej Sala

Founder Strivelab

11 kwietnia 2026
WordPress, Astro czy Next.js? Matryca decyzyjna, zanim ruszysz z migracją
WordPress, Astro czy Next.js? Matryca decyzyjna, zanim ruszysz z migracją

Zanim zaczniesz migrację, musisz wiedzieć dokąd. Matryca pięciu zmiennych (rozmiar serwisu, wydajność, e-commerce, model edycji treści, częstotliwość zmian) pokazuje, czy Twój następny stack to Astro, Next.js, czy nadal WordPress — zanim wydasz złotówkę na przepisywanie strony.

Maciej Sala

Maciej Sala

Founder Strivelab

29 maja 2026
Poprzedni wpisGoogle Search Console + Next.js — indeksacja, błędy, performance i co z nimi robićJak korzystać z Google Search Console dla strony Next.js? Weryfikacja, sitemap, indeksacja, Core Web Vitals, crawl budget i najczęstsze problemy — praktyczny poradnik.
Maciej Sala

Maciej Sala

Founder Strivelab

11 kwietnia 2026
Następny wpisAstro.js vs Next.js w 2026 — kompleksowe porównanie frameworkówPorównanie Astro 6 i Next.js 16 z perspektywy wdrożeń: architektura, JavaScript po stronie klienta, SEO, DX, hosting i konkretne przypadki użycia.
Maciej Sala

Maciej Sala

Founder Strivelab

15 kwietnia 2026