Mapa przekierowań dużego sklepu — automatyzacja pod kontrolą
Rozpocznij projekt
Blog E-commerce
E-commerce 10 kwietnia 2026

Mapa przekierowań dużego sklepu — automatyzacja pod kontrolą

Jak zbudować rejestr starych i nowych adresów z użyciem crawla, skryptu oraz ręcznej decyzji. Automatyczne dopasowanie tworzy kandydatów, nie gotowe redirecty.

Adrian Kozicki — autor artykułu, strateg SEO e-commerce
Adrian Kozicki Strateg SEO e-commerce · SEOmmerce
MigracjaTechnical SEOAutomatyzacjaPythonShoper

Przy dużym katalogu automatyzacja pomaga zestawić dane, ale nie może samodzielnie decydować o przekierowaniach. Poniżej metoda budowy rejestru: crawl, kandydaci dopasowań, ręczna weryfikacja i test każdej aktywowanej reguły.

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 i zachowaj surowy plik jako punkt odniesienia. Liczba wierszy zależy od produktów, paginacji, filtrów, tagów, wariantów oraz adresów technicznych — nie zakładaj jej na podstawie samej liczby SKU.

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')

Próg podobieństwa służy wyłącznie do kolejności ręcznej weryfikacji. Wynik algorytmu nie potwierdza zgodności intencji, historii linków ani statusu produktu, więc żaden wiersz nie powinien trafić do rejestru wykonawczego bez decyzji człowieka.

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 produktu archiwalnego bez semantycznego następcy wybierz HOLD albo właściwy status usunięcia. Nie przekierowuj go automatycznie do kategorii nadrzędnej tylko dlatego, że algorytm znalazł podobną nazwę.

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/

Przykład warstwy wykonawczej

Sposób wykonania zależy od hostingu, CDN-u i aktualnych możliwości platformy. Poniższy fragment pokazuje jedynie kontrakt rejestru; nie jest gotowym zaleceniem infrastrukturalnym ani substytutem testów pętli, łańcuchów i query stringów.

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ą

Przetestuj każdą zatwierdzoną regułę na środowisku kontrolnym oraz osobno sprawdź pozycje HOLD, które nie mogą wygenerować redirectu:

# 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

Pusty plik błędów nie kończy odbioru. Sprawdź jeszcze zgodność adresu końcowego z rejestrem, brak pętli i łańcuchów, zachowanie parametrów, odpowiedzi dla HOLD oraz próbę w prawdziwej przeglądarce.

Jak oszacować pracę

Nakład zależy od liczby unikalnych intencji, jakości eksportów, wariantów, historii adresów i odsetka pozycji bez następcy. Oszacowanie powstaje dopiero po crawlu i próbce ręcznej weryfikacji. Automatyzacja skraca porównywanie danych, ale nie zastępuje decyzji SEO ani odbioru technicznego.

Źródła referencyjne i dalsza weryfikacja

Materiały poniżej prowadzą do dokumentacji właścicieli platform i instytucji. Są punktem kontroli aktualności, a nie automatycznym potwierdzeniem każdego zdania w artykule.

Opublikowano: · Zaktualizowano:

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

Napisz do CyberSolus →

Więcej z bloga

Wróć do bazy wiedzy.

← Wszystkie artykuły