Как перенести сайт с WordPress на свою CMS

Kuznya Studio 18.09.2026 2

Ушёл от WordPress? Хочешь на свой движок? Перенос — реально сделать самому за несколько часов. Разберём по шагам.

Что нужно перенести

  1. Статьи блога — заголовок, slug, текст, дата, категории, теги
  2. Страницы — «О нас», «Контакты», «Политика»
  3. Картинки — все изображения из папки /wp-content/uploads/
  4. Меню и настройки
  5. Комментарии — если нужны

Не переносим: плагины WP, их настройки, темы, метаданные виджетов.

Шаг 1. Экспорт статей из WordPress

Три способа:

Способ A: Встроенный экспорт

  1. Админка WP → Инструменты → Экспорт
  2. Выбрать «Всё» или «Записи»
  3. Скачать XML-файл

Дальше XML нужно распарсить — не самый удобный вариант.

Способ B: Плагин WP All Export

Экспорт в CSV или Excel — удобнее. Можно выбрать нужные поля. Есть бесплатная версия.

Способ C: Через базу данных

Прямой SQL-запрос к таблице wp_posts:

SELECT ID, post_title, post_name, post_content, post_date, post_status
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC;

Плюс второй запрос для категорий и третий для тегов.

Шаг 2. Скачать картинки

Все изображения лежат в /wp-content/uploads/. Разбиты по месяцам:

/uploads/2026/09/kartinka.jpg

Скачай всю папку целиком по FTP.

Шаг 3. Подготовить данные

Из XML/CSV/SQL нужно извлечь:

  • Заголовок (title)
  • Slug (URL)
  • Содержимое (content)
  • Дата публикации
  • Категория (одна основная)
  • Теги (несколько)

Сохранить в JSON или CSV для импорта в новый движок.

Шаг 4. Конвертация HTML

WordPress использует Gutenberg-блоки. Их HTML-разметка может содержать:

  • <!-- wp:paragraph --> и подобные комментарии
  • Шорткоды вида [gallery], [contact-form-7]
  • Inline-стили от темы

Всё это нужно:

  1. Убрать шорткоды (они не работают вне WP)
  2. Убрать комментарии-блоки
  3. Оставить чистый HTML: <p>, <h2>, <ul>, <img>, <a>

Простой скрипт на PHP:

$clean = preg_replace('/<!--.*?-->/s', '', $content);
$clean = preg_replace('/\[\/?[a-z_]+[^\]]*\]/', '', $clean);

Шаг 5. Импорт в новую CMS

Если CMS поддерживает импорт из CSV/JSON — используй встроенный инструмент.

Если нет — пишем скрипт-импортёр:

$pdo->beginTransaction();

foreach ($posts as $post) {
    $data = [
        'content' => $post['content'],
        'excerpt' => mb_substr(strip_tags($post['content']), 0, 200),
    ];

    $stmt = $pdo->prepare("
        INSERT INTO content_items
        (type_id, slug, title, status, published_at, data)
        VALUES (?, ?, ?, 'published', ?, ?)
    ");
    $stmt->execute([
        $postTypeId,
        $post['slug'],
        $post['title'],
        $post['date'],
        json_encode($data, JSON_UNESCAPED_UNICODE),
    ]);

    $itemId = (int)$pdo->lastInsertId();

    // Привязка категории
    if ($catId) {
        $pdo->prepare("INSERT INTO content_item_terms (item_id, term_id) VALUES (?, ?)")
            ->execute([$itemId, $catId]);
    }
}

$pdo->commit();

Шаг 6. Перенос картинок

Два варианта:

A. Оставить старые URL

Если WP-сайт остаётся на поддомене (old.site.ru) — ссылки на картинки работают. Но это временное решение.

B. Заменить пути в контенте

В базе найти /wp-content/uploads/ и заменить на /assets/images/blog/ (или свой путь). Плюс физически перенести файлы.

$content = str_replace('/wp-content/uploads/', '/assets/images/blog/', $content);

Шаг 7. Настроить 301-редиректы

Все старые URL должны вести на новые. Иначе потеряешь весь SEO-вес.

В .htaccess:

RewriteRule ^wp-content/uploads/(.*)$ /assets/images/blog/$1 [R=301,L]
RewriteRule ^blog/([^/]+)/$ /blog/$1/ [R=301,L]

Если структура URL совпадает — редиректы не нужны. Если меняется — обязательны.

Шаг 8. Проверка

  • ☐ Все статьи на месте
  • ☐ Slug сохранены (важно для SEO)
  • ☐ Картинки загружаются
  • ☐ Категории и теги работают
  • ☐ 301-редиректы срабатывают (проверить curl -I old-url)
  • ☐ Sitemap обновлён
  • ☐ Яндекс.Вебмастер и Search Console уведомлены о переезде

Сколько времени займёт

  • 10-20 статей: 2-4 часа
  • 50-100 статей: 1-2 дня
  • 500+ статей: неделя работы

Основное время — конвертация HTML и проверка каждой статьи. Скрипт импортирует всё за 5 минут, но контент требует внимания.

Что важно не потерять

  • Slug — URL статей. Если изменится — потеряешь позиции
  • Дата публикации — влияет на «свежесть» в поиске
  • 301-редиректы — если URL изменились
  • Внутренние ссылки — между статьями

Всё остальное можно конвертировать или отбросить.

Если новый движок — Kuznya CMS, типы контента создаются в админке за 5 минут, и в них импортируются статьи через скрипт-импортёр. Никаких плагинов, никаких сторонних библиотек.