Міграція контенту при редизайні сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Міграція контенту при редизайні сайту
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Міграція контенту при редизайні сайту

Редизайн майже завжди супроводжується змінами структури контенту: URL-схеми, ієрархія сторінок, формати полів. Міграція контенту при редизайні відрізняється від CMS-міграції тим, що платформа може залишитися тією ж, але змінюється семантика даних.

Аудит контенту перед редизайном

# Сканування всіх URL сайту
npx screaming-frog-seo-spider --crawl https://mysite.com --headless \
  --export-tabs "Crawl Overview,Internal,Response Codes" \
  --output-folder ./crawl-results

# Або через sitemap
curl https://mysite.com/sitemap.xml | grep '<loc>' | sed 's/<[^>]*>//g' > urls.txt
wc -l urls.txt

Для кожної сторінки записуємо:

  • URL (старий та новий)
  • Тип контенту
  • Унікальні елементи (відео, галереї, форми)
  • Важливість для SEO (трафік з Google Analytics)

Маппінг URL

// scripts/generate-redirects.ts
// Генеруємо файл редиректів на основі маппінгу

const urlMapping: Record<string, string> = {
  '/blog/category/web-development': '/web-development',
  '/services/web-design':           '/services/design',
  '/about-us/team':                 '/team',
  '/portfolio':                     '/work',
};

// Для Next.js
const redirects = Object.entries(urlMapping).map(([source, destination]) => ({
  source,
  destination,
  permanent: true,
}));

// Для Nginx
const nginxRules = Object.entries(urlMapping)
  .map(([from, to]) => `rewrite ^${from}$ ${to} permanent;`)
  .join('\n');

Трансформація структури контенту

Приклад: реструктуризація блогу з додаванням нових полів:

// Було: простий пост з body
// Стало: пост з intro + body (StreamField) + callout + related_posts

async function transformPost(oldPost: OldPost): Promise<NewPost> {
  return {
    title:      oldPost.title,
    slug:       oldPost.slug,
    intro:      extractIntro(oldPost.body), // перший параграф
    body:       convertToStreamField(oldPost.body),
    publishedAt: oldPost.date,
    author:     await findOrCreateAuthor(oldPost.authorName),
    tags:       oldPost.tags,
    seoTitle:   oldPost.seoTitle || oldPost.title,
    seoDescription: oldPost.seoDescription || extractIntro(oldPost.body, 160),
  };
}

function extractIntro(html: string, maxChars = 250): string {
  const firstParagraph = html.match(/<p[^>]*>(.*?)<\/p>/s)?.[1] ?? '';
  const text = firstParagraph.replace(/<[^>]*>/g, '');
  return text.slice(0, maxChars).trim();
}

Обробка медіафайлів

При переходу на інше сховище потрібно оновити всі URL у контенті:

async function updateMediaUrls(content: string, urlMap: Map<string, string>): string {
  return content.replace(
    /https:\/\/old-domain\.com\/wp-content\/uploads\/([^\s"']+)/g,
    (match, path) => urlMap.get(path) || `https://cdn.newdomain.com/${path}`
  );
}

// Завантажуємо медіафайли і створюємо маппінг
async function migrateMedia(oldUrls: string[]) {
  const urlMap = new Map<string, string>();
  for (const url of oldUrls) {
    const buffer = await downloadFile(url);
    const key = url.split('/uploads/')[1];
    const newUrl = await uploadToS3(buffer, key);
    urlMap.set(key, newUrl);
  }
  return urlMap;
}

Паралельний запуск при редизайні

  1. Заморозка контенту — за 2 тижні до старту остаточної міграції
  2. Migrate-and-verify — мігруємо дані, верифікуємо ключові сторінки
  3. Parallel run — staging з новим дизайном та реальним контентом
  4. DNS cutover — перемикання у період низького трафіку
  5. Post-launch crawl — перевірка редиректів та 404

Валідація результату

# Перевіряємо, що всі старі URL або повертають 301, або 200
while IFS= read -r url; do
  status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
  echo "$status $url"
done < old-urls.txt | grep -v "^301\|^200" > broken.txt

Міграція контенту при редизайні середнього сайту (100–500 сторінок) — 2–4 тижні.