Две недели назад клиент спросил: «Правда ли, что интернет-магазин делается полгода?» Показал ему магазин косметики, который запустили за 28 дней — от первого звонка до первой продажи. За 16 лет работы с WordPress запустил 83 интернет-магазина. Средний срок — 4-6 недель от идеи до продаж. Самый быстрый — 14 дней (простой каталог). Самый долгий — 4 месяца (сложные интеграции с SAP). Сегодня покажу реальный план запуска за месяц на примере проекта «BeautyShop» — магазина корейской косметики.
Миф о «долгой разработке»: откуда растут ноги
Почему говорят, что интернет-магазин — это 6-12 месяцев?
Путают с enterprise разработкой:
- Маркетплейс уровня Ozon — да, 12+ месяцев
- Интеграция с 5 складами и SAP — да, 6 месяцев
- Простой магазин 200-500 товаров — 4-6 недель
Реальные сроки по сложности:
Простой магазин (200 товаров, 1 способ доставки):
├─ Дизайн: 1 неделя
├─ Разработка: 2 недели
├─ Наполнение: 1 неделя
└─ ИТОГО: 4 недели
Средний магазин (500-1000 товаров, интеграции):
├─ Дизайн: 2 недели
├─ Разработка: 3 недели
├─ Интеграции: 1 неделя
├─ Наполнение: 1 неделя
└─ ИТОГО: 6-7 недель
Сложный магазин (5000+ товаров, кастомный функционал):
├─ Аналитика: 2 недели
├─ Дизайн: 3 недели
├─ Разработка: 6 недель
├─ Интеграции: 3 недели
├─ Тестирование: 2 недели
└─ ИТОГО: 16 недель (4 месяца)
Реальный кейс: BeautyShop — от звонка до продажи за 28 дней
Исходные данные клиента
Клиент: Анна, импортер корейской косметики
Задача: Запустить онлайн-продажи
Текущая ситуация:
- Продажи только через Instagram
- Каталог: 350 товаров (уход за кожей, косметика)
- База клиентов: 2,400 человек
- Оборот: 800,000₽/мес (Instagram + маркетплейсы)
- Бюджет: 180,000₽
- Дедлайн: «Хочу к Black Friday» (через 5 недель)
Первый звонок (30 октября 2024):
Анна: «Мне сказали, что интернет-магазин делается полгода. Но у меня через месяц Black Friday — самая горячая пора. Можно ли успеть хотя бы базовую версию?»
Я: «Можем запустить MVP (минимально жизнеспособный продукт) за 4 недели. Получите рабочий магазин с приемом оплаты, доставкой и всем необходимым. Расширенный функционал добавим уже в процессе работы.»
План на 28 дней
Согласовали:
Неделя 1 (31 окт - 6 ноя): Подготовка и дизайн
Неделя 2 (7-13 ноября): Разработка
Неделя 3 (14-20 ноября): Наполнение и интеграции
Неделя 4 (21-27 ноября): Тестирование и запуск
День продаж: 28 ноября (Black Friday)
Оплата:
- 30% аванс (54,000₽) — после брифинга
- 40% (72,000₽) — после приемки дизайна
- 25% (45,000₽) — после запуска
- 5% (9,000₽) — через 30 дней (гарантия)
Неделя 1: Подготовка и дизайн (31 окт — 6 ноя)
День 1-2: Брифинг и анализ (31 окт — 1 ноя)
Что делали:
Встреча 1 (3 часа):
Обсудили:
✓ Целевая аудитория (женщины 25-45, уход за кожей)
✓ УТП (уникальное торговое предложение)
✓ Конкуренты (проанализировали 5 магазинов)
✓ Структуру каталога (категории, фильтры)
✓ Способы доставки (СДЭК, Почта, курьер)
✓ Способы оплаты (карты, СБП, наложенный платеж)
Получили от клиента:
✓ Excel с товарами (350 позиций)
✓ Фотографии товаров (средний уровень)
✓ Описания (короткие, нужно дописать)
✓ Логотип и фирменные цвета
✓ Доступ к Instagram (2,400 подписчиков)
Анализ конкурентов:
Изучил 5 магазинов корейской косметики:
textКонкурент 1: Cosmebox.ru
✓ Плюсы: чистый дизайн, быстрая работа
✗ Минусы: сложная навигация, плохие фильтры
Конкурент 2: Koreancosmetic.ru
✓ Плюсы: хорошие описания товаров
✗ Минусы: устаревший дизайн, долгая загрузка (3.2s)
Конкурент 3: K-beauty.ru
✓ Плюсы: программа лояльности
✗ Минусы: мало товаров, завышенные цены
Выводы:
→ Делаем акцент на скорость работы
→ Детальные фильтры (тип кожи, проблема, бренд)
→ Качественные описания с составом
→ Программа лояльности с первого дня
День 3-4: Структура и прототип (2-3 ноября)
Создали:
1. Карту сайта:
Главная
├─ Каталог
│ ├─ Уход за лицом
│ │ ├─ Пенки и гели для умывания
│ │ ├─ Тоники и мисты
│ │ ├─ Сыворотки и эссенции
│ │ ├─ Кремы
│ │ └─ Маски
│ ├─ Уход за телом
│ ├─ Макияж
│ └─ Волосы
├─ Бренды (алфавитный список)
├─ Акции
├─ О нас
├─ Доставка и оплата
├─ Контакты
└─ Блог (косметические советы)
Служебные:
├─ Корзина
├─ Оформление заказа
├─ Личный кабинет
│ ├─ Мои заказы
│ ├─ Избранное
│ ├─ Баллы лояльности
│ └─ Настройки
└─ Поиск
2. Wireframe (черновой макет):
Создал прототип в Figma за 6 часов:
- Главная страница
- Каталог с фильтрами
- Карточка товара
- Корзина и оформление заказа
Показали клиенту → согласовано с минимальными правками
День 5-7: Дизайн (4-6 ноября)
Что сделали:
Главная страница:
css<code><em>/* Стиль: чистый, минималистичный, светлый */</em>
Цветовая схема:
- Основной: #FF6B9D (розовый, женственный)
- Акцент: #C44569 (темно-розовый)
- Фон: #FFFFFF
- Текст: #2C3E50
Hero-секция:
- Крупный баннер с фото продукции
- Заголовок: "Корейская косметика в Москве"
- Подзаголовок: "Оригинальная продукция из Южной Кореи"
- CTA: "Перейти в каталог"
Преимущества (4 блока):
✓ Оригинальная продукция
✓ Бесплатная доставка от 3000₽
✓ Баллы за покупки
✓ Консультация косметолога
Хиты продаж:
- Слайдер с популярными товарами
- Быстрый просмотр
- Добавить в корзину / избранное
Instagram-лента:
- 6 последних постов
- Кнопка "Подписаться"
Блог:
- 3 последние статьи
- "Как выбрать крем для лица"
</code>Каталог:
Боковая панель (фильтры):
├─ Категория
├─ Бренд (чекбоксы, поиск)
├─ Цена (слайдер 500₽ - 5000₽)
├─ Тип кожи (сухая, жирная, комби, чувствительная)
├─ Проблема (акне, пигментация, морщины, расширенные поры)
├─ В наличии
└─ Акция
Основная часть:
├─ Хлебные крошки
├─ Сортировка (популярность, цена, новинки)
├─ Вид (сетка 3/4 колонки, список)
└─ Товары (пагинация 24 на странице)
Карточка товара в сетке:
- Фото (hover эффект - вторая фотография)
- Бейдж "Хит" / "Новинка" / "Акция"
- Название
- Бренд
- Цена (старая зачеркнутая + новая)
- Рейтинг звездами
- Кнопка "В корзину"
- Иконка "В избранное"
Карточка товара:
Левая колонка (60%):
├─ Галерея фотографий (5-7 фото)
├─ Zoom при наведении
└─ Видеообзор (если есть)
Правая колонка (40%):
├─ Название
├─ Бренд (кликабельный)
├─ Рейтинг и отзывы
├─ Цена
├─ Наличие (в наличии / под заказ)
├─ Краткое описание
├─ Объем/количество
├─ Кнопка "Добавить в корзину"
├─ Кнопка "Купить в 1 клик"
├─ Добавить в избранное
└─ Доставка и оплата (кратко)
Табы:
├─ Описание (подробное)
├─ Состав (на русском)
├─ Применение
├─ Отзывы
└─ Вопросы
Блок "С этим товаром покупают":
- 4 релевантных товара
Корзина и оформление:
Корзина:
├─ Список товаров (фото, название, цена, количество)
├─ Применить промокод
├─ Расчет доставки (ввод города)
├─ Итого (товары + доставка)
└─ Кнопка "Оформить заказ"
Оформление заказа (одна страница):
Блок 1: Контакты
├─ Имя
├─ Телефон
└─ Email
Блок 2: Доставка
├─ Способ (СДЭК, Почта России, Курьер)
├─ Город (автодополнение)
├─ Адрес (если курьер)
└─ Пункт выдачи (если СДЭК)
Блок 3: Оплата
├─ Онлайн (карта, СБП)
└─ При получении
Блок 4: Комментарий (необязательно)
Правая колонка: Состав заказа
└─ Кнопка "Оформить заказ"
Согласование с клиентом:
6 ноября показали дизайн в Figma → клиент утвердил с минимальными правками (изменили оттенок розового, переставили блоки на главной).
Оплата 2-го транша: 72,000₽
Неделя 2: Разработка (7-13 ноября)
День 8-9: Настройка окружения (7-8 ноября)
Что сделали:
1. Подготовили хостинг:
bash<code><em># VPS: 4 CPU, 8GB RAM, 160GB SSD</em>
<em># Ubuntu 22.04 LTS</em>
<em># Установка стека</em>
apt update && apt upgrade -y
apt install nginx php8.2-fpm php8.2-mysql php8.2-gd php8.2-imagick \
php8.2-curl php8.2-zip php8.2-xml php8.2-mbstring \
mysql-server redis-server -y
<em># Установка WordPress</em>
cd /var/www
wp core download --locale=ru_RU --allow-root
wp config create --dbname=beautyshop_db --dbuser=wp_user \
--dbpass=SECURE_PASS --allow-root
wp core install --url=beautyshop.ru \
--title="BeautyShop" \
--admin_user=admin --admin_email=admin@beautyshop.ru \
--allow-root
<em># Установка WooCommerce</em>
wp plugin install woocommerce --activate --allow-root
<em># Установка необходимых плагинов</em>
wp plugin install \
redis-cache \
wp-rocket \
wordfence \
woocommerce-russian \
cdek-integration \
yookassa-payment \
--activate --allow-root
</code>2. Настройка производительности:
php<code><em>// wp-config.php</em>
define('WP_CACHE', true);
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
<em>// Redis для object cache</em>
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
<em>// Отключение ненужных фич</em>
define('WP_POST_REVISIONS', 3);
define('AUTOSAVE_INTERVAL', 300);
define('EMPTY_TRASH_DAYS', 7);
</code>3. Настройка безопасности:
php<code><em>// Скрыть версию WordPress</em>
remove_action('wp_head', 'wp_generator');
<em>// Отключить XML-RPC</em>
add_filter('xmlrpc_enabled', '__return_false');
<em>// Защита wp-config.php</em>
<em>// .htaccess</em>
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
<em>// Ограничить попытки входа (Wordfence)</em>
</code>День 10-12: Разработка темы (9-11 ноября)
Создали кастомную тему на базе Underscores:
php<code>// functions.php - основная настройка
<?php
<em>// Поддержка WooCommerce</em>
add_action('after_setup_theme', function() {
add_theme_support('woocommerce');
add_theme_support('wc-product-gallery-zoom');
add_theme_support('wc-product-gallery-lightbox');
add_theme_support('wc-product-gallery-slider');
});
<em>// Регистрация областей меню</em>
register_nav_menus(array(
'primary' => 'Основное меню',
'footer' => 'Меню в футере',
'mobile' => 'Мобильное меню'
));
<em>// Размеры изображений</em>
add_image_size('product-thumb', 400, 400, true);
add_image_size('product-large', 800, 800, true);
add_image_size('blog-thumb', 600, 400, true);
<em>// Сайдбар для фильтров</em>
register_sidebar(array(
'name' => 'Фильтры каталога',
'id' => 'shop-sidebar',
'before_widget' => '<div class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>'
));
</code>Кастомизация WooCommerce:
php<code>// Изменение структуры каталога
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20);
remove_action('woocommerce_before_shop_loop', 'woocommerce_result_count', 20);
// Добавление бейджей "Хит", "Новинка"
add_action('woocommerce_before_shop_loop_item_title', function() {
global $product;
// Хит продаж
if ($product->get_meta('_is_bestseller') === 'yes') {
echo '<span class="badge badge-bestseller">Хит</span>';
}
// Новинка (товар добавлен менее 30 дней назад)
$created_date = $product->get_date_created();
$days_ago = (time() - $created_date->getTimestamp()) / DAY_IN_SECONDS;
if ($days_ago <= 30) {
echo '<span class="badge badge-new">Новинка</span>';
}
// Акция
if ($product->is_on_sale()) {
$regular_price = $product->get_regular_price();
$sale_price = $product->get_sale_price();
$discount = round((($regular_price - $sale_price) / $regular_price) * 100);
echo '<span class="badge badge-sale">-' . $discount . '%</span>';
}
}, 10);
// Кастомные фильтры для каталога
function add_custom_product_filters() {
if (!is_shop() && !is_product_category()) return;
?>
<div class="custom-filters">
<h3>Фильтры</h3>
<em><!-- Фильтр по типу кожи --></em>
<div class="filter-group">
<h4>Тип кожи</h4>
<?php
$skin_types = array(
'dry' => 'Сухая',
'oily' => 'Жирная',
'combination' => 'Комбинированная',
'sensitive' => 'Чувствительная'
);
foreach ($skin_types as $slug => $name) {
$checked = isset($_GET['skin_type']) && $_GET['skin_type'] === $slug ? 'checked' : '';
echo '<label><input type="checkbox" name="skin_type[]" value="' . $slug . '" ' . $checked . '> ' . $name . '</label>';
}
?>
</div>
<em><!-- Фильтр по проблеме --></em>
<div class="filter-group">
<h4>Проблема кожи</h4>
<?php
$concerns = array(
'acne' => 'Акне',
'wrinkles' => 'Морщины',
'pigmentation' => 'Пигментация',
'pores' => 'Расширенные поры',
'dryness' => 'Сухость'
);
foreach ($concerns as $slug => $name) {
$checked = isset($_GET['concern']) && $_GET['concern'] === $slug ? 'checked' : '';
echo '<label><input type="checkbox" name="concern[]" value="' . $slug . '" ' . $checked . '> ' . $name . '</label>';
}
?>
</div>
<button type="submit" class="apply-filters">Применить</button>
<button type="button" class="reset-filters">Сбросить</button>
</div>
<?php
}
add_action('woocommerce_sidebar', 'add_custom_product_filters');
<em>// Обработка кастомных фильтров</em>
add_action('pre_get_posts', function($query) {
if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category())) {
$meta_query = $query->get('meta_query') ?: array();
<em>// Фильтр по типу кожи</em>
if (isset($_GET['skin_type']) && !empty($_GET['skin_type'])) {
$meta_query[] = array(
'key' => '_skin_type',
'value' => $_GET['skin_type'],
'compare' => 'IN'
);
}
<em>// Фильтр по проблеме</em>
if (isset($_GET['concern']) && !empty($_GET['concern'])) {
$meta_query[] = array(
'key' => '_concern',
'value' => $_GET['concern'],
'compare' => 'IN'
);
}
if (!empty($meta_query)) {
$query->set('meta_query', $meta_query);
}
}
});
</code>Быстрый просмотр товара (AJAX):
javascript<code><em>// quick-view.js</em>
jQuery(document).ready(function($) {
$('.quick-view-button').on('click', function(e) {
e.preventDefault();
const productId = $(this).data('product-id');
$.ajax({
url: wc_ajax_params.ajax_url,
type: 'POST',
data: {
action: 'quick_view_product',
product_id: productId
},
beforeSend: function() {
showLoader();
},
success: function(response) {
if (response.success) {
showQuickViewModal(response.data.html);
}
},
complete: function() {
hideLoader();
}
});
});
});
</code>php<code><em>// AJAX handler для быстрого просмотра</em>
add_action('wp_ajax_quick_view_product', 'ajax_quick_view_product');
add_action('wp_ajax_nopriv_quick_view_product', 'ajax_quick_view_product');
function ajax_quick_view_product() {
$product_id = intval($_POST['product_id']);
$product = wc_get_product($product_id);
if (!$product) {
wp_send_json_error();
}
ob_start();
wc_get_template('quick-view.php', array('product' => $product));
$html = ob_get_clean();
wp_send_json_success(array('html' => $html));
}
</code>День 13: Интеграции (12 ноября)
1. Интеграция с СДЭК:
php<code><em>// Использовали плагин CDEK Integration</em>
<em>// Настройка в wp-admin:</em>
<em>// - API ключ СДЭК</em>
<em>// - Склад отправления (Москва)</em>
<em>// - Автоматический расчет стоимости</em>
<em>// - Печать накладных</em>
<em>// Кастомизация расчета доставки</em>
add_filter('cdek_shipping_cost', function($cost, $order) {
<em>// Бесплатная доставка от 3000₽</em>
$cart_total = WC()->cart->get_subtotal();
if ($cart_total >= 3000) {
return 0;
}
return $cost;
}, 10, 2);
</code>2. Интеграция с ЮKassa (оплата):
php<code><em>// Подключение ЮKassa</em>
<em>// - Создали магазин в личном кабинете ЮKassa</em>
<em>// - Получили shopId и secretKey</em>
<em>// - Настроили webhook для уведомлений об оплате</em>
<em>// Способы оплаты:</em>
<em>// ✓ Банковские карты</em>
<em>// ✓ СБП (Система быстрых платежей)</em>
<em>// ✓ ЮMoney</em>
<em>// ✓ QIWI</em>
<em>// ✓ Наличными при получении (отключена предоплата)</em>
</code>3. Интеграция с email-рассылками:
php<code><em>// Подключили UniSender</em>
<em>// Автоматические письма:</em>
<em>// ✓ Подтверждение заказа</em>
<em>// ✓ Изменение статуса заказа</em>
<em>// ✓ Отправка заказа (трек-номер)</em>
<em>// ✓ Доставлен</em>
<em>// ✓ Брошенная корзина (через 2 часа)</em>
add_action('woocommerce_order_status_processing', function($order_id) {
$order = wc_get_order($order_id);
$email = $order->get_billing_email();
<em>// Отправка в UniSender</em>
$api = new UniSenderAPI('YOUR_API_KEY');
$api->subscribe(array(
'email' => $email,
'list_ids' => array(12345), <em>// ID списка "Покупатели"</em>
'fields' => array(
'Name' => $order->get_billing_first_name(),
'LastOrderDate' => date('Y-m-d'),
'LastOrderAmount' => $order->get_total()
)
));
});
</code>4. Программа лояльности:
php<code><em>// Простая система баллов</em>
class Loyalty_Program {
<em>// 5% от суммы заказа в баллы</em>
public function award_points($order_id) {
$order = wc_get_order($order_id);
$user_id = $order->get_user_id();
if (!$user_id) return;
$order_total = $order->get_total();
$points = round($order_total * 0.05);
$current_points = get_user_meta($user_id, 'loyalty_points', true);
$new_points = $current_points + $points;
update_user_meta($user_id, 'loyalty_points', $new_points);
<em>// Уведомление клиента</em>
$order->add_order_note(
sprintf('Начислено %d баллов. Всего баллов: %d', $points, $new_points)
);
}
<em>// Использование баллов при оплате (1 балл = 1 рубль)</em>
public function apply_discount($cart) {
if (!is_user_logged_in()) return;
$user_id = get_current_user_id();
$points = get_user_meta($user_id, 'loyalty_points', true);
if ($points <= 0) return;
$cart_total = $cart->get_subtotal();
$max_discount = $cart_total * 0.3; <em>// Максимум 30% от суммы</em>
$discount = min($points, $max_discount);
if (isset($_POST['use_loyalty_points']) && $_POST['use_loyalty_points'] === 'yes') {
$cart->add_fee('Списание баллов', -$discount);
<em>// Списываем баллы после оформления заказа</em>
add_action('woocommerce_thankyou', function($order_id) use ($user_id, $discount) {
$current_points = get_user_meta($user_id, 'loyalty_points', true);
update_user_meta($user_id, 'loyalty_points', $current_points - $discount);
});
}
}
}
$loyalty = new Loyalty_Program();
add_action('woocommerce_order_status_completed', array($loyalty, 'award_points'));
add_action('woocommerce_cart_calculate_fees', array($loyalty, 'apply_discount'));
</code>Неделя 3: Наполнение и тестирование (14-20 ноября)
День 14-16: Импорт товаров (14-16 ноября)
Получили от клиента:
- Excel файл с 350 товарами
- Папку с фотографиями (неструктурированная)
- Короткие описания (нужна доработка)
Процесс импорта:
php<code>// 1. Подготовили CSV для импорта
// Структура:
// SKU, Название, Описание, Цена, Категория, Бренд, Фото
// 2. Обработали фотографии
// - Переименовали по SKU
// - Сжали (оригинал 5-10MB → 200-300KB)
// - Конвертировали в WebP
// - Создали миниатюры
// Скрипт для массовой обработки фотографий
<?php
$images_dir = '/var/www/beautyshop/images/';
$files = glob($images_dir . '*.{jpg,jpeg,png}', GLOB_BRACE);
foreach ($files as $file) {
$filename = basename($file);
$sku = pathinfo($filename, PATHINFO_FILENAME);
<em>// Оптимизация</em>
$image = wp_get_image_editor($file);
if (!is_wp_error($image)) {
$image->resize(800, 800, false);
$image->set_quality(85);
$image->save($file);
<em>// WebP версия</em>
$webp_file = str_replace(array('.jpg', '.jpeg', '.png'), '.webp', $file);
imagewebp(imagecreatefromjpeg($file), $webp_file, 85);
}
}
<em>// 3. Импорт через WP All Import</em>
<em>// - Маппинг полей из CSV</em>
<em>// - Привязка изображений по SKU</em>
<em>// - Создание категорий и брендов</em>
<em>// - Установка атрибутов (тип кожи, проблема)</em>
</code>Дописали описания:
Наняли копирайтера для улучшения описаний:
БЫЛО:
"Крем для лица увлажняющий"
СТАЛО:
"Увлажняющий крем с гиалуроновой кислотой
Глубоко увлажняет кожу и удерживает влагу на 24 часа.
Подходит для сухой и обезвоженной кожи.
Ключевые ингредиенты:
• Гиалуроновая кислота (3 типа молекул) - увлажнение на всех уровнях кожи
• Пантенол - успокаивает и восстанавливает
• Ниацинамид - выравнивает тон кожи
Применение:
Нанесите на очищенную кожу утром и вечером.
Мягко распределите массажными движениями до полного впитывания.
Объем: 50 мл
Производитель: Cosrx (Южная Корея)"
День 17-18: Контент-страницы (17-18 ноября)
Создали:
1. Главная страница:
- Hero-баннер с промо Black Friday
- Блок преимуществ (4 иконки)
- Хиты продаж (слайдер)
- Категории товаров (карточки с фото)
- О магазине (краткий текст)
- Instagram-лента (6 постов)
- Отзывы клиентов (3 карточки)
2. Страница «О нас»:
- История магазина
- Миссия и ценности
- Команда (фото + описание)
- Сертификаты (подлинность продукции)
3. Доставка и оплата:
- Способы доставки (СДЭК, Почта, Курьер)
- Стоимость и сроки
- Способы оплаты
- Возврат и обмен
4. Блог (5 статей для старта):
- «10-этапная корейская система ухода за кожей»
- «Как выбрать крем по типу кожи»
- «5 ошибок в уходе за кожей»
- «Состав косметики: что искать, чего избегать»
- «Секреты корейского сияния кожи»
День 19-20: Тестирование (19-20 ноября)
Чек-лист тестирования:
Функциональное тестирование:
☑ Регистрация и вход
☑ Добавление товара в корзину
☑ Изменение количества в корзине
☑ Удаление из корзины
☑ Применение промокода
☑ Оформление заказа (все способы доставки)
☑ Оплата (тестовая карта)
☑ Личный кабинет (заказы, баллы, избранное)
☑ Поиск товаров
☑ Фильтры в каталоге
☑ Быстрый просмотр
☑ Отзывы на товары
☑ Подписка на рассылку
Кроссбраузерное тестирование:
☑ Chrome (Desktop + Mobile)
☑ Safari (Desktop + Mobile)
☑ Firefox
☑ Edge
Тестирование на устройствах:
☑ iPhone 12, 13, 14
☑ Samsung Galaxy S21, S22
☑ iPad
☑ Desktop (1920x1080, 1366x768)
Производительность:
☑ PageSpeed Score: 89/100 (mobile), 94/100 (desktop)
☑ TTFB: 0.7s
☑ LCP: 1.8s
☑ CLS: 0.05
SEO:
☑ Title и description на всех страницах
☑ Open Graph теги
☑ Sitemap.xml
☑ robots.txt
☑ Микроразметка товаров (Schema.org)
Безопасность:
☑ SSL сертификат
☑ Firewall (Wordfence)
☑ Защита от brute-force
☑ Резервные копии настроены
Найденные баги и исправления:
Баг #1: Фильтры не сбрасываются
Исправлено: Добавили кнопку "Сбросить фильтры"
Баг #2: На iPhone форма оплаты обрезается
Исправлено: Увеличили padding для мобильных
Баг #3: Медленная загрузка галереи товара
Исправлено: Включили lazy loading для изображений
Баг #4: Email о заказе не приходит
Исправлено: Настроили SMTP через Gmail
Баг #5: Промокод применяется несколько раз
Исправлено: Добавили проверку на использование
Неделя 4: Финальная подготовка и запуск (21-27 ноября)
День 21-23: Наполнение и SEO (21-23 ноября)
SEO-оптимизация:
php<code><em>// Yoast SEO настройки</em>
<em>// 1. Title шаблоны</em>
add_filter('wpseo_title', function($title) {
if (is_product()) {
global $post;
$product = wc_get_product($post->ID);
return $product->get_name() . ' - купить в Москве | BeautyShop';
}
return $title;
});
<em>// 2. Meta description для товаров</em>
add_action('wp_head', function() {
if (is_product()) {
global $post;
$product = wc_get_product($post->ID);
$excerpt = wp_trim_words($product->get_short_description(), 20);
echo '<meta name="description" content="' . esc_attr($excerpt) . ' ✓ Оригинальная корейская косметика ✓ Доставка по России ✓ Баллы за покупки">';
}
});
<em>// 3. Микроразметка товаров</em>
add_action('woocommerce_single_product_summary', function() {
global $product;
$schema = array(
'@context' => 'https://schema.org/',
'@type' => 'Product',
'name' => $product->get_name(),
'image' => wp_get_attachment_url($product->get_image_id()),
'description' => $product->get_short_description(),
'sku' => $product->get_sku(),
'brand' => array(
'@type' => 'Brand',
'name' => $product->get_attribute('pa_brand')
),
'offers' => array(
'@type' => 'Offer',
'url' => get_permalink(),
'priceCurrency' => 'RUB',
'price' => $product->get_price(),
'availability' => $product->is_in_stock() ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock'
)
);
if ($product->get_rating_count() > 0) {
$schema['aggregateRating'] = array(
'@type' => 'AggregateRating',
'ratingValue' => $product->get_average_rating(),
'reviewCount' => $product->get_rating_count()
);
}
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
}, 5);
</code>День 24-25: Подготовка к Black Friday (24-25 ноября)
Создали акции:
php<code><em>// 1. Скидка 25% на все товары</em>
<em>// WooCommerce → Купоны → Создать купон</em>
Код: BLACKFRIDAY
Тип: Скидка в процентах
Сумма: 25
Срок действия: 28-29 ноября
<em>// 2. Баннер на главной</em>
<div class="promo-banner black-friday">
<h2>BLACK FRIDAY</h2>
<p>Скидка 25% на ВСЕ товары!</p>
<p class="countdown" data-end="2024-11-29 23:59:59">
<span class="hours">00</span>:<span class="minutes">00</span>:<span class="seconds">00</span>
</p>
<a href="/shop/" class="btn-large">В каталог →</a>
</div>
<script>
<em>// Таймер обратного отсчета</em>
function updateCountdown() {
const end = new Date($('.countdown').data('end')).getTime();
const now = new Date().getTime();
const diff = end - now;
if (diff > 0) {
const hours = Math.floor(diff / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
$('.countdown .hours').text(String(hours).padStart(2, '0'));
$('.countdown .minutes').text(String(minutes).padStart(2, '0'));
$('.countdown .seconds').text(String(seconds).padStart(2, '0'));
}
}
setInterval(updateCountdown, 1000);
</script>
<em>// 3. Email-рассылка базе (2,400 человек из Instagram)</em>
<em>// Тема: "BLACK FRIDAY! Корейская косметика -25%"</em>
<em>// Контент: промо + топ-10 товаров + промокод</em>
</code>Подготовили сервер:
bash<code><em># Оптимизация под нагрузку</em>
<em># 1. Увеличили PHP memory</em>
php_value memory_limit 512M
php_value max_execution_time 300
<em># 2. Настроили Nginx кеширование</em>
location / {
proxy_cache_valid 200 60m;
proxy_cache_bypass $cookie_woocommerce_items_in_cart;
}
<em># 3. Настроили Redis</em>
maxmemory 1gb
maxmemory-policy allkeys-lru
<em># 4. Проверили backup</em>
wp db export /backups/pre-launch-$(date +%Y%m%d).sql --allow-root
tar -czf /backups/files-$(date +%Y%m%d).tar.gz /var/www/beautyshop
</code>День 26-27: Запуск и мониторинг (26-27 ноября)
26 ноября (Pre-launch):
09:00 - Финальная проверка всех функций
10:00 - Создание финального бэкапа
11:00 - Перевод сайта из режима "Скоро открытие" в production
12:00 - Отправка email-рассылки (2,400 адресов)
13:00 - Публикация постов в Instagram (3 поста)
14:00 - Запуск контекстной рекламы (Яндекс.Директ)
15:00 - Мониторинг первых заказов
27 ноября (День до Black Friday):
Статистика:
├─ Посетителей: 847
├─ Заказов: 23
├─ Конверсия: 2.7%
├─ Средний чек: 3,200₽
└─ Выручка: 73,600₽
Проблемы:
✓ Сервер держит нагрузку
✓ Все заказы обрабатываются корректно
✓ Оплата работает
✓ Email-уведомления приходят
Клиент в восторге!
День 28: Black Friday — первый большой день (28 ноября)
Результаты дня:
TRAFFIC:
├─ Посетителей: 3,421
├─ Источники:
├─ Email-рассылка: 38%
├─ Instagram: 27%
├─ Контекстная реклама: 22%
├─ Прямые заходы: 9%
└─ Органика: 4%
ПРОДАЖИ:
├─ Заказов: 147
├─ Конверсия: 4.3%
├─ Средний чек: 4,100₽
├─ Выручка: 602,700₽
├─ Использовали промокод: 89%
└─ Новых клиентов: 134 (91%)
TOP-5 ТОВАРОВ:
1. Пенка для умывания Cosrx - 34 шт
2. Тканевая маска набор - 28 шт
3. Увлажняющий крем Innisfree - 23 шт
4. Сыворотка с витамином C - 19 шт
5. Солнцезащитный крем - 17 шт
Отзыв клиента (Анна):
«Я не верила, что за месяц можно запустить полноценный магазин. Думала, что получу какую-то недоделанную версию. Но нет!
Сайт выглядит профессионально. Работает быстро. Все функции на месте. В первый день Black Friday мы продали на 600 тысяч — это больше, чем за весь прошлый месяц в Instagram!
Самое классное — система полностью автоматизирована. Заказ поступает → клиент получает письмо → мы видим заказ в админке → печатаем накладную СДЭК → отправляем. Никаких ручных операций.
Программа лояльности работает отлично — уже 23 человека накопили баллы и вернулись за второй покупкой.
Конечно, не все идеально. Нужно добавить live-chat, улучшить систему отзывов, сделать мобильное приложение. Но это уже улучшения. Базовый функционал работает на 100%.
Мои вложения: 180,000₽. За первую неделю продали на 1,200,000₽. Окупилось за 4 дня!»
Чек-лист запуска магазина за месяц
Предстартовая подготовка (до начала работ):
☐ Определена ниша и целевая аудитория
☐ Есть каталог товаров (хотя бы в Excel)
☐ Есть фотографии товаров (или готовы их сделать)
☐ Есть юридическое лицо (ИП или ООО)
☐ Открыт расчетный счет
☐ Определены способы доставки
☐ Выбран платежный шлюз (ЮKassa, Тинькофф и т.д.)
☐ Есть бюджет 150,000-300,000₽
☐ Есть время на участие в процессе (2-3 часа в день)
Неделя 1: Фундамент
☐ Брифинг с разработчиком (3 часа)
☐ Анализ конкурентов (1-2 дня)
☐ Структура сайта (карта, wireframes)
☐ Дизайн главной страницы
☐ Дизайн каталога
☐ Дизайн карточки товара
☐ Дизайн корзины и оформления заказа
☐ Согласование дизайна с клиентом
Неделя 2: Разработка
☐ Настройка хостинга (VPS рекомендуется)
☐ Установка WordPress + WooCommerce
☐ Установка необходимых плагинов
☐ Разработка кастомной темы
☐ Настройка способов доставки
☐ Настройка способов оплаты
☐ Интеграция с курьерскими службами
☐ Программа лояльности
☐ Email-рассылки
Неделя 3: Контент
☐ Импорт товаров из CSV/Excel
☐ Оптимизация фотографий товаров
☐ Написание/улучшение описаний
☐ Создание категорий и фильтров
☐ Контент-страницы (О нас, Доставка, Контакты)
☐ Юридические страницы (Оферта, Политика конфиденциальности)
☐ Статьи для блога (3-5 штук)
☐ SEO-оптимизация всех страниц
Неделя 4: Тестирование и запуск
☐ Функциональное тестирование
☐ Кроссбраузерное тестирование
☐ Тестирование на мобильных устройствах
☐ Проверка производительности
☐ SEO-аудит
☐ Security audit
☐ Настройка аналитики (Яндекс.Метрика, Google Analytics)
☐ Настройка резервного копирования
☐ Обучение клиента работе с админ-панелью
☐ Запуск!
Что делать после запуска: первые 30 дней
Неделя 1 после запуска:
☐ Ежедневный мониторинг заказов
☐ Отслеживание аналитики
☐ Сбор обратной связи от клиентов
☐ Исправление критичных багов (если есть)
☐ Оптимизация на основе поведения пользователей
Неделя 2-4 после запуска:
☐ A/B тестирование элементов сайта
☐ Оптимизация конверсии
☐ Запуск email-маркетинга
☐ Контент-маркетинг (блог)
☐ Работа с отзывами
☐ Анализ воронки продаж
☐ Планирование улучшений
Стоимость и ROI
Инвестиции в запуск (BeautyShop):
Разработка сайта: 180,000₽
├─ Дизайн: 60,000₽
├─ Разработка: 80,000₽
├─ Контент и SEO: 30,000₽
└─ Тестирование: 10,000₽
Хостинг (1 год): 60,000₽
Фотосъемка товаров: 15,000₽
Копирайтинг: 20,000₽
--------------------------------------
ИТОГО: 275,000₽
Результаты первого месяца:
Выручка: 1,847,000₽
Заказов: 387
Средний чек: 4,770₽
Конверсия: 3.8%
Повторных покупок: 12%
Расходы:
├─ Себестоимость товаров (60%): 1,108,200₽
├─ Доставка: 89,000₽
├─ Реклама: 140,000₽
├─ Комиссия платежной системы (2%): 36,940₽
└─ Прочие расходы: 25,000₽
Прибыль: 447,860₽
ROI: (447,860 / 275,000) × 100% = 162%
Окупаемость: 0.6 месяца (18 дней!)
Интернет-магазин за месяц — это не миф, а реальность при правильном планировании. Ключ к успеху — фокус на MVP (минимально жизнеспособном продукте). Не пытайтесь запустить идеальный магазин с сотней фич. Запустите рабочую версию с базовым функционалом: каталог, корзина, оплата, доставка. Все остальное добавите потом на основе реальной обратной связи от клиентов. BeautyShop стартовал с 350 товарами и окупился за 18 дней. Через 3 месяца добавили мобильное приложение, live-chat и расширенную программу лояльности. Но главное — они начали продавать с первого дня. Не ждите идеального момента. Запускайте MVP, тестируйте гипотезы, улучшайте на ходу. Месяц от идеи до первой продажи — это реально.



