Rozpocznij projekt
Blog E-commerce
E-commerce 10 kwietnia 2026

Mapa przekierowań dla 10 000+ produktów — automatyzacja zamiast ręcznej pracy

Jak zbudować mapping starej struktury URL do nowej używając Screaming Frog, Pythona i Excela. Case study z migracji WooCommerce → Shoper z 12 000 SKU.

Adrian Kozicki — autor artykułu, strateg SEO e-commerce
Adrian Kozicki Strateg SEO e-commerce · SEOmmerce
MigracjaTechnical SEOAutomatyzacjaPythonShoper
Mapa przekierowań dla 10 000+ produktów — automatyzacja zamiast ręcznej pracy

Migracja sklepu z 12 000 produktami bez automatyzacji mapowania przekierowań to tygodnie ręcznej pracy i nieuchronne błędy. Poniżej metodologia, którą stosujemy — od crawla do gotowego pliku z przekierowaniami.

Krok 1: Eksport pełnej mapy URL ze starego sklepu

Screaming Frog SEO Spider → Internal → Export → All.

Interesują Cię kolumny:

  • Address (pełny URL)
  • Status Code (chcesz tylko 200)
  • Indexability (filtrujesz „Indexable”)
  • H1-1 (tytuł strony — przydatny do matchowania z nową strukturą)
  • Meta Description 1

Eksportuj do CSV. Dla 12 000 produktów + kategorie + tagi → zwykle 15 000-20 000 wierszy.

Krok 2: Eksport nowej struktury z docelowej platformy

W Shoper: Panel → Produkty → Eksport → format CSV. Eksportujesz:

  • ID produktu
  • Slug URL (jeśli Shoper go generuje)
  • Nazwa produktu
  • Kategoria

Jeśli Shoper jeszcze nie ma URL-i (nowy sklep w trakcie konfiguracji) — generujesz je na podstawie nazwy produktu.

Krok 3: Automatyczne matchowanie — Python

import pandas as pd
from fuzzywuzzy import fuzz

old_urls = pd.read_csv('old_crawl.csv')
new_urls = pd.read_csv('new_products.csv')

def find_best_match(old_name, new_df):
    scores = new_df['product_name'].apply(
        lambda x: fuzz.token_sort_ratio(old_name, x)
    )
    best_idx = scores.idxmax()
    return new_df.loc[best_idx, 'url'], scores[best_idx]

results = []
for _, row in old_urls.iterrows():
    new_url, score = find_best_match(row['H1-1'], new_urls)
    results.append({
        'old_url': row['Address'],
        'new_url': new_url,
        'confidence': score
    })

df_results = pd.DataFrame(results)
# Eksport do weryfikacji ręcznej
df_results[df_results['confidence'] < 85].to_csv('needs_review.csv')
df_results[df_results['confidence'] >= 85].to_csv('auto_matched.csv')

Typowe wyniki dla dobrze nazwanych produktów: 80-90% automatycznie zmatchowanych z pewnością >85%.

Krok 4: Ręczna weryfikacja niskiej pewności

needs_review.csv — to są URL-e, gdzie algorytm nie był pewny. Otwierasz w Excelu, sprawdzasz każdy wiersz i ręcznie przypisujesz właściwy nowy URL.

Dla produktów archiwalnych (nie mają odpowiednika w nowym sklepie) — mapujesz do najbliższej kategorii nadrzędnej.

Krok 5: Format końcowy i wdrożenie

Gotowy plik mapowania w formacie:

stary_url,nowy_url
https://starystore.pl/produkt/sofa-szara,https://nowystore.pl/sofy/sofa-premium-szara/

Implementacja przez Cloudflare Workers (zalecane dla Shoper)

Shoper nie daje dostępu do .htaccess. Najlepsza opcja: Cloudflare Workers jako middleware.

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

const redirects = {
  '/stara-kategoria/stary-produkt/': '/nowa-kategoria/nowy-produkt/',
  // ... cały mapping
}

async function handleRequest(request) {
  const url = new URL(request.url)
  const path = url.pathname
  
  if (redirects[path]) {
    return Response.redirect(
      `${url.origin}${redirects[path]}`,
      301
    )
  }
  
  return fetch(request)
}

Testowanie przed migracją

Obowiązkowo przetestuj 100% przekierowań na środowisku staging:

# Skrypt bash do testowania przekierowań
while IFS=, read old new; do
    status=$(curl -s -o /dev/null -w "%{http_code}" -L "$old")
    final=$(curl -s -o /dev/null -w "%{url_effective}" -L "$old")
    echo "$old -> $new | Status: $status | Final: $final"
done < redirects.csv | grep -v "301\|302" > errors.txt

Jeśli errors.txt jest pusty — gotowe do migracji.

Ile to zajmuje

Dla sklepu 12 000 SKU:

  • Crawl starego sklepu: 2-4h
  • Eksport nowych URL-i: 30min
  • Automatyczne matchowanie: 15min
  • Ręczna weryfikacja (20% wierszy): 4-6h
  • Wdrożenie i testy: 2h

Łącznie: 1-2 dni robocze zamiast 2-3 tygodni ręcznej pracy.

Masz pytania do tego artykułu lub chcesz żebym spojrzał na Twój sklep?

Napisz do mnie →

Więcej z bloga

Wróć do bazy wiedzy.

← Wszystkie artykuły