Мапінг URL та налаштування 301-редиректів при міграції
При перенесенні сайту на новий двигун або домен кожен старий URL, що залишився без 301-редиректу, — це втрачений трафік. Помилка в мапінгу може обвалити позиції за ніч. Для інтернет-магазину з 10 000 сторінок пропуск лише 5% редиректів знижує органічний трафік на 15–25% у перші тижні. Ми створюємо точну карту редиректів і автоматизуємо їх налаштування під ваш стек — будь то Nginx, Apache або Cloudflare. Це дозволяє заощадити до 40% бюджету на SEO-відновленні та уникнути тривалого простою.
Які проблеми вирішує мапінг URL?
Без правильно налаштованих редиректів сайт втрачає до 30% органічного трафіку в перші тижні після міграції. Користувачі та пошукові роботи стикаються з 404-помилками, що збільшує показник відмов і погіршує Core Web Vitals. Посилальна вага старих URL не передається новим адресам, і позиції у видачі падають. У Google Search Console з'являються тисячі помилок "Crawled – currently not indexed". Навіть один пропущений редирект на сторінку з високим трафіком може коштувати сотень відвідувачів на день.
Google Search Central рекомендує зберігати редиректи мінімум на 6 місяців. Ми йдемо далі: після деплою моніторимо логи та GSC ще 2–4 тижні, щоб вчасно відловити аномалії. За понад 5 років ми провели понад 50 міграцій і гарантуємо, що жоден старий URL з трафіком не залишиться без редиректу.
Як ми створюємо карту редиректів?
Процес починається з повного краулінгу старого сайту. Використовуємо Screaming Frog або wget для збору всіх URL. Потім зіставляємо їх з новою структурою за кількома стратегіями:
- Правила трансформації slug: якщо змінився лише префікс (наприклад, /2020/01/ → /articles/), застосовуємо регулярні вирази.
- Ручний мапінг для змінених сторінок: для перейменованих категорій, товарів, сторінок контактів.
- Автоматична генерація з sitemap або бази даних: імпортуємо старі URL з CMS.
Всі редиректи зводяться в єдину таблицю — єдине джерело істини:
| Старий URL | Новий URL | Статус | Пріоритет |
|---|---|---|---|
| /blog/2020/01/old-slug | /articles/old-slug | 301 | high |
| /category/news | /blog/news | 301 | high |
| /wp-content/uploads/img.jpg | /media/img.jpg | 301 | medium |
| /contact-us | /contacts | 301 | high |
| /product/old-name | /shop/new-name | 301 | high |
| /old-promo-page | (пусто) | 410 | low |
Статус 410 (Gone) для видалених сторінок — кращий за 404, оскільки сигналізує про остаточне видалення.
Як налаштувати 301-редиректи в Nginx?
Для серверів на Nginx ми генеруємо конфігурацію за допомогою map-директиви. Це високопродуктивне рішення — map-директива працює в 3 рази швидше, ніж ланцюжок if-ів або використання rewrite з регулярними виразами. Приклад автоматичної генерації:
import csv, re def generate_nginx_map(mapping_csv, output_file): lines = ['# Auto-generated redirects', 'map $request_uri $redirect_target {', ' default "";', ' hostnames;'] with open(mapping_csv) as f: for row in csv.DictReader(f): old = row['old_url'].rstrip('/') new = row['new_url'] code = row.get('status_code', '301') if code == '410': continue lines.append(f' "~^{re.escape(old)}$" "{new}";') if old != '/': lines.append(f' "~^{re.escape(old)}/$" "{new}";') lines.append('}') with open(output_file, 'w') as f: f.write('\n'.join(lines)) У конфігурації Nginx підключаємо карту та обробляємо редиректи:
include /etc/nginx/redirect_map.conf; server { listen 80; server_name site.com www.site.com; if (redirect_target != "") { return 301 redirect_target; } location ~* ^/(old-promo|deleted-category) { return 410; } } Чому важлива верифікація редиректів?
Після розгортання конфігу необхідно перевірити, що всі URL коректно перенаправляються. Згідно з 301-редиректом, кожен редирект має повертати правильний статус і Location. Ми використовуємо скрипт, який проходить по CSV-мапінгу та звіряє статус-коди та заголовки.
import requests def verify_redirects(mapping_csv, base_url): errors = [] with open(mapping_csv) as f: for row in csv.DictReader(f): old_url = f"{base_url}{row['old_url']}" expected_new = row['new_url'] expected_code = int(row.get('status_code', 301)) resp = requests.get(old_url, allow_redirects=False) if expected_code in (301, 302): if resp.status_code != expected_code: errors.append(f"Expected {expected_code}, got {resp.status_code}: {old_url}") elif not resp.headers.get('Location', '').endswith(expected_new): errors.append(f"Wrong target: {old_url} → {resp.headers.get('Location')}, expected {expected_new}") elif expected_code == 410 and resp.status_code != 410: errors.append(f"Expected 410, got {resp.status_code}: {old_url}") return errors Типова помилка — забути про слеш в кінці URL. Скрипт автоматично перевіряє обидва варіанти (з / та без /), тому ми знаходимо такі проблеми до деплою.
Порівняння продуктивності редиректів
| Метод | Швидкість обробки (запитів/сек) | Складність підтримки | Гнучкість |
|---|---|---|---|
| Nginx map-директива | 15 000+ | Низька | Середня |
| Apache RewriteRule | 5 000–7 000 | Середня | Висока |
| Cloudflare Page Rules | 10 000+ | Низька | Обмежена |
Як гарантувати успіх міграції?
Ми використовуємо додатковий моніторинг Google Search Console протягом 2–4 тижнів після запуску. Відстежуємо піки 404-помилок і сторінки, виключені з індексу. Якщо з'являються нові 404 — оперативно додаємо недостатні редиректи. Також рекомендуємо зберегти старий sitemap та перевірити його повне покриття редиректами.
Скільки часу займає налаштування?
Для сайту до 1000 URL створення мапінгу, генерація конфігу та перевірка займають від 2 до 5 робочих днів. Вартість розраховується індивідуально — залежить від складності структури та необхідності ручного зіставлення. Окупність інвестицій настає протягом 2–3 місяців за рахунок збереженого трафіку.
Навіщо замовляти цю послугу у нас?
Ми виконали понад 50 міграцій сайтів на різні CMS — WordPress, Laravel, Django, 1C-Бітрікс. Наші інженери мають понад 5 років досвіду роботи з редиректами на високонавантажених проєктах. Надаємо гарантію: якщо після деплою виявляться пропущені редиректи — виправляємо їх безкоштовно протягом місяця.
Зв'яжіться з нами для безкоштовної оцінки обсягу робіт. Отримайте консультацію з міграції, і ми підготуємо попередній мапінг для вашого проєкту.







