Интернет-магазин - это не просто каталог с кнопкой "Купить"
Многие предприниматели думают, что интернет-магазин - это каталог товаров с ценами и кнопка "Купить". Собрал за выходные на конструкторе - и продажи пошли. В реальности это так не работает.
Представьте обычный магазин на улице. Каталог товаров - это просто полки с товарами. Но магазин - это ещё и кассовый аппарат, терминал оплаты, склад, система учёта, витрина, вывеска, охрана, примерочная, служба доставки, программа лояльности. Без всего этого "магазин" - просто комната с товарами.
В онлайне - то же самое. Современный интернет-магазин в 2026 году - это целая экосистема: каталог, умный поиск, корзина, онлайн-оплата, интеграция с доставкой, личный кабинет, SEO-оптимизация, аналитика, CRM, автоматические уведомления. И каждый из этих элементов влияет на продажи.
В этой статье мы разберём все компоненты современного интернет-магазина. Не техническим языком, а с точки зрения бизнеса: зачем каждый элемент нужен, сколько денег он приносит (или экономит), и в каком порядке их внедрять.
Каталог товаров: не просто список, а инструмент продаж
Каталог - это основа магазина, но "просто список товаров" и "продающий каталог" - это разные вещи.
Чем хороший каталог отличается от плохого:
| Плохой каталог | Хороший каталог |
|---|---|
| Одно фото товара | 5-8 фото + видео + 360-обзор |
| Описание из 2 строк | Подробные характеристики + описание пользы |
| Нет фильтров | Фильтры по цене, размеру, цвету, бренду |
| Поиск по точному названию | Умный поиск с подсказками и исправлением опечаток |
| Все товары в одном списке | Категории, подкатегории, теги |
| Нет отзывов | Отзывы с фото + рейтинг |
По статистике, 76% покупателей уходят с сайта, если не могут быстро найти нужный товар. Фильтры и поиск - это не "приятный бонус", а необходимость.
Что должно быть на карточке товара:
- Фотографии высокого качества - минимум 3 фото с разных ракурсов. В онлайне покупатель не может потрогать товар, поэтому фото - это ваш главный продавец
- Цена - крупно и заметно. Если есть скидка - показать старую цену зачёркнутой
- Наличие - "В наличии" или "Под заказ, 3-5 дней". Ничто не раздражает покупателей больше, чем узнать об отсутствии товара после оформления заказа
- Характеристики - размер, вес, материал, цвет. Чем подробнее - тем меньше возвратов
- Кнопка "В корзину" - большая, контрастная, всегда на виду
- Похожие товары - "С этим товаром покупают" увеличивает средний чек на 15-30%
Вот как выглядит структура данных карточки товара:
// Структура товара в базе данных магазина
// Каждое поле - это информация, которую видит покупатель
{
"id": "prod_12345", // Уникальный код товара (для системы)
"name": "Кроссовки Nike Air Max 90", // Название - то, что видит покупатель
"slug": "krossovki-nike-air-max-90", // URL-адрес (для SEO)
"price": 12990, // Цена в рублях
"oldPrice": 15990, // Старая цена (зачёркнутая, показывает скидку)
"inStock": true, // Есть на складе? true = да, false = нет
"quantity": 47, // Сколько штук осталось на складе
// Фотографии - минимум 3, лучше 5-8
"images": [
"/photos/nike-air-max-90-front.webp", // Спереди
"/photos/nike-air-max-90-side.webp", // Сбоку
"/photos/nike-air-max-90-back.webp", // Сзади
"/photos/nike-air-max-90-sole.webp", // Подошва
"/photos/nike-air-max-90-box.webp" // В коробке
],
// Характеристики для фильтров
"category": "Обувь",
"subcategory": "Кроссовки",
"brand": "Nike",
"color": "Белый",
"sizes": ["40", "41", "42", "43", "44"], // Доступные размеры
"material": "Кожа + текстиль",
// Описание для SEO и покупателя
"description": "Легендарные кроссовки Nike Air Max 90...",
"features": [
"Технология Air Max - амортизация при каждом шаге",
"Дышащий верх из комбинации кожи и текстиля",
"Резиновая подошва с протектором для сцепления"
],
// Средний рейтинг и количество отзывов
"rating": 4.7,
"reviewCount": 128,
// Похожие товары (для блока "С этим покупают")
"relatedProducts": ["prod_12346", "prod_12347", "prod_12400"]
}
Умный поиск: как не потерять покупателей
Покупатель пришёл на сайт, ввёл в поиск "кроссовки найк белые 42 размер" - и ничего не нашёл, потому что в базе написано "Nike", а не "найк". Покупатель уходит к конкуренту. Вы потеряли продажу.
Умный поиск (его ещё называют "full-text search" или "поиск с нечётким соответствием") - это когда система понимает:
- Опечатки - "кросовки" находит "кроссовки"
- Синонимы - "кеды" находит и кеды, и сникеры
- Транслитерацию - "nike" и "найк" - это одно и то же
- Падежи и формы слов - "красных кроссовок" находит "красные кроссовки"
- Подсказки при вводе - начал вводить "кросс" - уже показывает варианты
По нашему опыту, магазины с умным поиском продают на 20-35% больше, чем магазины с обычным поиском. Покупатель, который ищет конкретный товар - это самый "горячий" клиент, он уже готов купить. Не дайте ему уйти из-за плохого поиска.
// Пример: как работает умный поиск на сервере
// Это упрощённый пример - в реальности используются
// специальные поисковые движки (Elasticsearch, Meilisearch)
// Покупатель ввёл: "кросовки найк белые"
// Шаг 1: Исправляем опечатки
// "кросовки" -> "кроссовки" (нечёткое сравнение, алгоритм Левенштейна)
// Шаг 2: Переводим бренды
// "найк" -> "Nike" (словарь синонимов)
// Шаг 3: Ищем по всем полям одновременно
// SELECT * FROM products
// WHERE (name LIKE '%кроссовки%' OR description LIKE '%кроссовки%')
// AND (brand = 'Nike' OR name LIKE '%Nike%')
// AND (color = 'Белый' OR name LIKE '%белые%')
// ORDER BY relevance DESC, popularity DESC
// Шаг 4: Сортируем результаты по релевантности
// Сначала - точные совпадения, потом - похожие
// Учитываем популярность товара и наличие на складе
// Пример с Meilisearch (быстрый поисковый движок)
// meilisearch.com - бесплатный, открытый код
// Настройка занимает 30 минут
// Загружаем товары в поисковый индекс:
const index = client.index('products')
await index.addDocuments(products)
// Настраиваем синонимы:
await index.updateSynonyms({
'найк': ['nike'],
'адидас': ['adidas'],
'кеды': ['сникеры', 'sneakers'],
'телефон': ['смартфон', 'мобильный'],
})
// Настраиваем поля для поиска (по приоритету):
await index.updateSearchableAttributes([
'name', // Название - высший приоритет
'brand', // Бренд
'category', // Категория
'description', // Описание - низший приоритет
])
// Теперь поиск "кросовки найк" найдёт "Кроссовки Nike Air Max"
// Даже с опечаткой и транслитерацией!
const results = await index.search('кросовки найк')
// results.hits = [
// { name: "Кроссовки Nike Air Max 90", ... },
// { name: "Кроссовки Nike Revolution 6", ... },
// ...
// ]
Корзина и оформление заказа: где теряется 70% покупателей
Вот шокирующая статистика: в среднем 70% покупателей, которые добавили товар в корзину, НЕ завершают покупку. Это называется "брошенная корзина". Представьте: 10 человек положили товар в тележку в супермаркете, но только 3 дошли до кассы.
Почему люди бросают корзину:
- Неожиданные расходы на доставку (48% случаев)
- Требуется создать аккаунт для покупки (26%)
- Слишком сложный процесс оформления (22%)
- Нет доверия к сайту (нет отзывов, сертификатов) (18%)
- Мало способов оплаты (9%)
Как снизить процент брошенных корзин:
1. Покупка без регистрации - не заставляйте человека создавать аккаунт. Он хочет купить кроссовки, а не стать вашим "зарегистрированным пользователем". Предложите регистрацию ПОСЛЕ покупки: "Хотите сохранить данные, чтобы в следующий раз не вводить?"
2. Минимум полей - для заказа достаточно: имя, телефон, адрес доставки. Всё остальное (email, дата рождения, пол) - необязательные поля. Каждое лишнее поле снижает конверсию на 3-5%.
3. Показывайте стоимость доставки сразу - не прячьте её до последнего шага. Покупатель видит товар за 3000 рублей, добавляет в корзину, переходит к оплате - и тут бац, доставка 500 рублей. Он чувствует себя обманутым и уходит.
4. Напоминание о брошенной корзине - если покупатель ушёл, отправьте ему письмо через час: "Вы забыли кроссовки в корзине! Завершите покупку". Такие письма возвращают до 15% покупателей.
// Компонент корзины для интернет-магазина
// React + TypeScript
// Что хранится в корзине покупателя
interface CartItem {
productId: string // Какой товар
name: string // Название (чтобы показать в корзине)
price: number // Цена за штуку (в рублях)
quantity: number // Сколько штук
image: string // Фото товара
size?: string // Размер (если есть)
}
// Форма оформления заказа - МИНИМУМ полей!
interface OrderForm {
name: string // Имя покупателя
phone: string // Телефон (для связи по заказу)
address: string // Адрес доставки
comment?: string // Комментарий (необязательно)
// НЕ требуем email, пол, дату рождения -
// каждое лишнее поле = минус 3-5% конверсии
}
// Компонент страницы оформления заказа
function CheckoutPage() {
const [cart, setCart] = useState(getCart())
const [form, setForm] = useState({ name: '', phone: '', address: '' })
const [loading, setLoading] = useState(false)
// Общая сумма заказа
const total = cart.reduce(
(sum, item) => sum + item.price * item.quantity, 0
)
// Стоимость доставки - показываем СРАЗУ, не прячем
const deliveryCost = total >= 5000 ? 0 : 350
// Бесплатная доставка от 5000 руб - мотивирует добавить ещё товар
async function handleSubmit() {
setLoading(true)
// Отправляем заказ на сервер
const response = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
items: cart, // Товары из корзины
...form, // Данные покупателя
})
})
if (response.ok) {
clearCart() // Очищаем корзину
// Перенаправляем на страницу "Спасибо за заказ!"
router.push('/order-success')
}
setLoading(false)
}
return (
// Показываем товары + форму + итого на одной странице
// Не разбиваем на 5 шагов - чем проще, тем больше продаж
)
}
Онлайн-оплата: как принимать деньги на сайте
В 2026 году "оплата при получении" - это уже прошлый век. 67% покупателей предпочитают оплатить заказ онлайн, картой или через СБП (Систему быстрых платежей).
Какие способы оплаты подключить (в порядке приоритета):
- Банковская карта (Visa, Mastercard, МИР) - основной способ, 60% платежей
- СБП (QR-код) - растёт быстрее всего, комиссия ниже (0.4-0.7% vs 1.5-2.5% для карт)
- ЮMoney, SberPay - дополнительные способы, добавляют 5-10% конверсии
- Оплата при получении - для тех, кто не доверяет онлайн-оплате
- Рассрочка/кредит - для дорогих товаров (от 10 000 руб). Увеличивает средний чек на 40%
Платёжные системы для подключения:
| Система | Комиссия | Подключение | Для кого |
|---|---|---|---|
| ЮKassa (ex. Яндекс.Касса) | 2.8-3.5% | 1-3 дня | Любой бизнес, простая интеграция |
| CloudPayments | 2.3-2.9% | 1-2 дня | Средний бизнес, рекуррентные платежи |
| Robokassa | 3.5-5% | 1 день | Маленькие магазины, быстрый старт |
| Тинькофф Оплата | 2.19-2.69% | 2-5 дней | Клиенты Тинькофф, низкая комиссия |
| СБП напрямую | 0.4-0.7% | 3-7 дней | Экономия на комиссии |
Важный нюанс: не экономьте на платёжной системе. Разница в комиссии 0.5% - это копейки по сравнению с потерянными продажами из-за неудобной оплаты. Выбирайте ту, которая поддерживает больше способов оплаты.
// Пример интеграции с ЮKassa (самый популярный в России)
// Документация: yookassa.ru/developers
// Шаг 1: Устанавливаем библиотеку
// npm install @yookassa/sdk
// Шаг 2: Настраиваем на сервере
// .env файл (секретные ключи, НЕ публикуйте их!)
// YOOKASSA_SHOP_ID=123456
// YOOKASSA_SECRET_KEY=test_AbCdEf123456
// Шаг 3: Создаём платёж при оформлении заказа
// src/app/api/payments/route.ts
import { NextRequest, NextResponse } from 'next/server'
// POST /api/payments - создать платёж
export async function POST(request: NextRequest) {
const { orderId, amount, description } = await request.json()
// Отправляем запрос в ЮKassa на создание платежа
const payment = await fetch('https://api.yookassa.ru/v3/payments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// Авторизация: shopId:secretKey в формате Basic Auth
'Authorization': 'Basic ' + Buffer.from(
`${process.env.YOOKASSA_SHOP_ID}:${process.env.YOOKASSA_SECRET_KEY}`
).toString('base64'),
// Уникальный ключ операции (чтобы не создать дубль)
'Idempotence-Key': `order-${orderId}-${Date.now()}`
},
body: JSON.stringify({
amount: {
value: amount.toFixed(2), // Сумма, например "12990.00"
currency: 'RUB' // Валюта - рубли
},
confirmation: {
type: 'redirect',
// Куда вернуть покупателя после оплаты
return_url: `https://myshop.ru/order-success?id=${orderId}`
},
description: description, // "Заказ #12345"
capture: true, // Списать деньги сразу (не холдировать)
metadata: { orderId } // Наши данные - вернутся в webhook
})
}).then(r => r.json())
// payment.confirmation.confirmation_url - ссылка на страницу оплаты
// Перенаправляем покупателя туда
return NextResponse.json({
paymentUrl: payment.confirmation.confirmation_url
})
}
// Шаг 4: Webhook - ЮKassa сообщает нам об успешной оплате
// src/app/api/payments/webhook/route.ts
export async function POST(request: NextRequest) {
const body = await request.json()
// ЮKassa отправляет уведомление когда платёж прошёл
if (body.event === 'payment.succeeded') {
const orderId = body.object.metadata.orderId
// Обновляем статус заказа в нашей базе данных
await prisma.order.update({
where: { id: orderId },
data: { status: 'paid', paidAt: new Date() }
})
// Отправляем покупателю подтверждение
await sendOrderConfirmation(orderId)
}
return NextResponse.json({ status: 'ok' })
}
Доставка: интеграция с курьерскими службами
Доставка - это то, что отличает успешный интернет-магазин от провального. Покупатель хочет знать: сколько стоит доставка, когда придёт, и где сейчас его посылка.
3 способа организовать доставку:
1. Своя курьерская служба - подходит для локального бизнеса (доставка по городу). Вы контролируете качество, но ограничены географией. Хорошо для цветов, еды, срочных товаров.
2. Курьерские агрегаторы (СДЭК, Boxberry, DPD) - самый популярный вариант. Одна интеграция - и вы доставляете по всей России. У СДЭК, например, 30 000 пунктов выдачи.
3. Почта России - дешевле всего, но дольше. Для недорогих товаров, где покупатель готов подождать 5-10 дней.
Мы рекомендуем подключить минимум 2 способа доставки: курьерскую службу (СДЭК или Boxberry) + самовывоз из пункта выдачи. Это покрывает 90% потребностей покупателей.
// Пример интеграции с СДЭК (API v2)
// Документация: api-docs.cdek.ru
// Шаг 1: Рассчитываем стоимость доставки
// Вызывается когда покупатель вводит адрес
async function calculateDelivery(cityTo, weight, dimensions) {
// Получаем токен авторизации СДЭК
const token = await getCdekToken()
// Запрашиваем стоимость доставки
const response = await fetch('https://api.cdek.ru/v2/calculator/tariff', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
// Откуда отправляем (код города отправителя)
from_location: { code: 44 }, // 44 = Москва
// Куда доставляем (код города получателя)
to_location: { code: cityTo },
// Тариф: 137 = "Посылка склад-склад" (самый дешёвый)
// 139 = "Посылка склад-дверь" (курьер до двери)
tariff_code: 137,
// Параметры посылки
packages: [{
weight: weight, // Вес в граммах (например, 500)
length: dimensions.length, // Длина в см
width: dimensions.width, // Ширина в см
height: dimensions.height // Высота в см
}]
})
}).then(r => r.json())
return {
price: response.total_sum, // Стоимость доставки в рублях
days: response.period_min + '-' + response.period_max + ' дней',
// Например: "350 руб, 3-5 дней"
}
}
// Шаг 2: Показываем покупателю на странице оформления
// "Доставка СДЭК: 350 руб, 3-5 рабочих дней"
// "Самовывоз из пункта выдачи: 250 руб, 2-4 рабочих дня"
// "Курьер до двери: 500 руб, 2-3 рабочих дня"
// Шаг 3: Создаём заказ на доставку после оплаты
async function createDeliveryOrder(order) {
const token = await getCdekToken()
const delivery = await fetch('https://api.cdek.ru/v2/orders', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
tariff_code: 137,
// Данные отправителя (ваш склад)
from_location: {
code: 44,
address: 'ул. Складская, д. 1'
},
// Данные получателя (покупатель)
to_location: {
code: order.cityCode,
address: order.address
},
// Получатель
recipient: {
name: order.name,
phones: [{ number: order.phone }]
},
// Посылка
packages: [{
number: `ORDER-${order.id}`,
weight: order.totalWeight,
items: order.items.map(item => ({
name: item.name,
ware_key: item.productId,
payment: { value: 0 }, // 0 = уже оплачено онлайн
cost: item.price,
weight: item.weight,
amount: item.quantity
}))
}]
})
}).then(r => r.json())
// Сохраняем трек-номер СДЭК
// Покупатель сможет отслеживать посылку
await prisma.order.update({
where: { id: order.id },
data: {
trackingNumber: delivery.entity.uuid,
status: 'shipped'
}
})
}
Личный кабинет: зачем он нужен покупателю
Личный кабинет - это не просто "логин и пароль". Это инструмент, который превращает разового покупателя в постоянного клиента.
Что должно быть в личном кабинете:
- История заказов - покупатель видит все свои заказы, статусы, может повторить заказ одним кликом. "Повторить заказ" увеличивает частоту покупок на 25%
- Отслеживание доставки - трек-номер и статус посылки прямо в кабинете, не нужно идти на сайт СДЭК
- Избранное (вишлист) - товары, которые понравились, но пока не купил. Отправьте уведомление когда цена снизится - и получите продажу
- Сохранённые адреса - не вводить адрес заново при каждом заказе
- Бонусная программа - накопительные баллы, скидки за повторные покупки. "У вас 500 бонусов = 500 руб скидка" - мощная мотивация купить снова
- Персональные рекомендации - "На основе ваших покупок вам может понравиться..." Увеличивает продажи на 15-30%
Важно: личный кабинет - это не "обязаловка" при первой покупке. Предложите зарегистрироваться ПОСЛЕ покупки: "Создайте аккаунт, чтобы отслеживать заказ и получить 200 бонусных рублей на следующую покупку". Так и аккаунт получите, и покупателя не отпугнёте.
SEO для интернет-магазина: как попасть в топ Яндекса
Вы можете создать идеальный магазин, но если его нет в Яндексе - покупатели вас просто не найдут. SEO (Search Engine Optimization) - это оптимизация сайта для поисковых систем.
Основные правила SEO для интернет-магазина:
1. Уникальные заголовки и описания для каждого товара
Не копируйте описание с сайта производителя - Яндекс это видит и понижает в выдаче. Напишите своё описание, уникальное для вашего магазина.
// Как формировать SEO-метатеги для страниц товаров
// Метатеги - это скрытая информация для поисковых систем
// ПЛОХО (одинаковые для всех товаров):
// title: "Интернет-магазин обуви"
// description: "Купить обувь в интернет-магазине"
// ХОРОШО (уникальные для каждого товара):
// title: "Кроссовки Nike Air Max 90 белые - купить за 12 990 руб"
// description: "Кроссовки Nike Air Max 90 белого цвета.
// Размеры 40-44. Бесплатная доставка от 5000 руб.
// В наличии на складе, отправка сегодня."
// В Next.js это делается через функцию generateMetadata:
export async function generateMetadata({ params }) {
// Загружаем данные товара из базы данных
const product = await getProduct(params.slug)
return {
// title - заголовок в результатах Яндекса (до 60 символов)
title: `${product.name} - купить за ${product.price} руб | МойМагазин`,
// description - описание под заголовком (до 160 символов)
description: `${product.name}. ${product.shortDescription}. ` +
`Доставка по всей России. В наличии ${product.quantity} шт.`,
// Open Graph - для красивых превью в соцсетях и мессенджерах
openGraph: {
title: product.name,
description: product.shortDescription,
images: [product.images[0]], // Главное фото товара
type: 'product',
},
}
}
2. Структурированные данные (Schema.org)
Это специальная разметка, которая помогает Яндексу понять, что на странице - товар. В результатах поиска появится цена, рейтинг, наличие - и ваш сайт станет заметнее.
// Schema.org разметка для товара
// Добавляется в HTML страницы товара
// Яндекс и Google читают эту разметку и показывают
// расширенные сниппеты в поисковой выдаче
// Без разметки в Яндексе: "Кроссовки Nike Air Max 90 - МойМагазин"
// С разметкой: "Кроссовки Nike Air Max 90 - 12 990 руб ★★★★★ (128 отзывов) В наличии"
// Второй вариант получает в 2-3 раза больше кликов!
const productSchema = {
"@context": "https://schema.org",
"@type": "Product",
"name": "Кроссовки Nike Air Max 90",
"image": "https://myshop.ru/photos/nike-air-max-90.webp",
"description": "Легендарные кроссовки Nike Air Max 90...",
"brand": { "@type": "Brand", "name": "Nike" },
"sku": "NIKE-AM90-WHT",
"offers": {
"@type": "Offer",
"url": "https://myshop.ru/products/nike-air-max-90",
"priceCurrency": "RUB",
"price": "12990",
"availability": "https://schema.org/InStock",
"seller": { "@type": "Organization", "name": "МойМагазин" }
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}
// Вставляем в HTML:
// <script type="application/ld+json">
// {JSON.stringify(productSchema)}
// </script>
3. Быстрая загрузка сайта
Яндекс официально учитывает скорость загрузки при ранжировании. Если ваш магазин грузится 5 секунд, а конкурент - 1 секунду, конкурент будет выше в выдаче. Подробнее о скорости мы написали в статье про PageSpeed оптимизацию.
4. Мобильная версия
В 2026 году 75% покупок в интернет-магазинах совершаются с телефона. Если ваш сайт неудобен на мобильном - вы теряете 3 из 4 покупателей. Яндекс это тоже учитывает: сайты без мобильной версии понижаются в мобильной выдаче.
Аналитика: как понять, что работает, а что нет
Без аналитики интернет-магазин - это как автомобиль без приборной панели. Вы едете, но не знаете ни скорость, ни уровень топлива, ни температуру двигателя. Вроде едете, но в любой момент может что-то сломаться.
Ключевые метрики интернет-магазина:
| Метрика | Что показывает | Хороший показатель |
|---|---|---|
| Конверсия (CR) | % посетителей, которые купили | 2-5% (зависит от ниши) |
| Средний чек (AOV) | Средняя сумма одного заказа | Зависит от товаров |
| Стоимость привлечения (CAC) | Сколько стоит один покупатель | Ниже, чем прибыль с первого заказа |
| Показатель отказов | % ушедших с первой страницы | Ниже 40% |
| Возвращаемость | % покупателей, купивших повторно | Выше 30% |
| Брошенные корзины | % незавершённых заказов | Ниже 65% |
Минимальный набор инструментов аналитики:
- Яндекс Метрика (бесплатно) - поведение пользователей, Вебвизор (запись действий), конверсии, источники трафика
- Яндекс Вебмастер (бесплатно) - как Яндекс видит ваш сайт, какие страницы проиндексированы, по каким запросам показывается
- E-commerce отчёты в Метрике (бесплатно) - специальный модуль для магазинов: какие товары покупают, откуда приходят покупатели, средний чек
// Подключение Яндекс Метрики с e-commerce отслеживанием
// Это позволяет видеть полную воронку продаж:
// посещение -> просмотр товара -> добавление в корзину -> покупка
// Шаг 1: Добавляем счётчик Метрики на сайт (в layout.tsx)
// Код счётчика выдаётся в личном кабинете metrika.yandex.ru
// Шаг 2: Отправляем данные о действиях покупателя
// Когда покупатель просмотрел товар:
function trackProductView(product) {
// ym - функция Яндекс Метрики
// 'ecommerce:detail' - событие "просмотр товара"
window.ym(METRIKA_ID, 'ecommerce:detail', {
products: [{
id: product.id, // ID товара
name: product.name, // Название
price: product.price, // Цена
brand: product.brand, // Бренд
category: product.category // Категория
}]
})
}
// Когда добавил в корзину:
function trackAddToCart(product) {
window.ym(METRIKA_ID, 'ecommerce:add', {
products: [{
id: product.id,
name: product.name,
price: product.price,
quantity: 1
}]
})
}
// Когда оформил заказ (самое важное событие!):
function trackPurchase(order) {
window.ym(METRIKA_ID, 'ecommerce:purchase', {
actionField: {
id: order.id, // Номер заказа
revenue: order.total, // Сумма заказа
},
products: order.items.map(item => ({
id: item.productId,
name: item.name,
price: item.price,
quantity: item.quantity
}))
})
}
// Теперь в Метрике вы увидите:
// - Сколько людей смотрят товары
// - Сколько добавляют в корзину
// - Сколько покупают
// - На каком этапе уходят
// Это называется "воронка продаж" - и она показывает,
// где именно вы теряете деньги
Уведомления: не теряйте связь с покупателем
После оформления заказа покупатель хочет знать: "Мой заказ приняли? Когда отправят? Где он сейчас?" Если покупатель не получает информацию - он нервничает, звонит в поддержку, пишет негативные отзывы.
Минимальный набор автоматических уведомлений:
- "Заказ принят" - сразу после оформления. Номер заказа, список товаров, сумма
- "Оплата прошла" - подтверждение оплаты (если онлайн)
- "Заказ отправлен" - трек-номер для отслеживания
- "Заказ доставлен" - напоминание забрать из пункта выдачи
- "Оставьте отзыв" - через 7 дней после получения. Отзывы увеличивают конверсию на 20%
Каналы уведомлений:
- Email - основной канал. Все уведомления о заказе
- SMS - для срочных: "Заказ прибыл в пункт выдачи"
- Push-уведомления - бесплатная альтернатива SMS
- Telegram-бот - набирает популярность, удобно для покупателя и бесплатно для вас
// Автоматические email-уведомления о заказе
// Используем react-email для красивых шаблонов
// (react-email.com - бесплатная библиотека)
// Шаг 1: Создаём шаблон письма
// emails/OrderConfirmation.tsx
import { Html, Head, Body, Container, Text, Hr } from '@react-email/components'
function OrderConfirmationEmail({ order }) {
return (
// Письмо "Заказ принят"
// Покупатель получает его через 1-2 секунды после оформления
<Html>
<Head />
<Body style={{ fontFamily: 'Arial, sans-serif' }}>
<Container>
<Text style={{ fontSize: 20, fontWeight: 'bold' }}>
Заказ #{order.id} принят!
</Text>
<Text>Спасибо за покупку, {order.name}!</Text>
{/* Список товаров */}
{order.items.map(item => (
<Text key={item.id}>
{item.name} x {item.quantity} - {item.price * item.quantity} руб.
</Text>
))}
<Hr />
<Text style={{ fontWeight: 'bold' }}>
Итого: {order.total} руб.
</Text>
<Text>Доставка: {order.deliveryMethod}</Text>
<Text>Адрес: {order.address}</Text>
<Text style={{ color: '#666' }}>
Мы отправим трек-номер, как только передадим
заказ курьерской службе (обычно 1-2 рабочих дня).
</Text>
</Container>
</Body>
</Html>
)
}
// Шаг 2: Отправляем письмо после создания заказа
// Используем Resend (resend.com) - 3000 писем/месяц бесплатно
import { Resend } from 'resend'
const resend = new Resend(process.env.RESEND_API_KEY)
async function sendOrderConfirmation(order) {
await resend.emails.send({
from: 'МойМагазин <[email protected]>',
to: order.email,
subject: `Заказ #${order.id} принят - МойМагазин`,
react: OrderConfirmationEmail({ order })
// react-email автоматически превращает React-компонент
// в HTML-письмо, которое выглядит хорошо во всех почтовых клиентах
})
}
Безопасность: защита данных покупателей
Интернет-магазин работает с персональными данными: имена, адреса, телефоны, данные карт. Утечка этих данных - это не только потеря доверия клиентов, но и штрафы по закону о персональных данных (152-ФЗ).
Минимальные требования безопасности:
- SSL-сертификат (HTTPS) - обязателен. Без него Яндекс пометит сайт как "небезопасный", а покупатели не будут вводить данные карты. Let's Encrypt выдаёт бесплатно
- Не храните данные карт - пусть этим занимается платёжная система (ЮKassa, CloudPayments). Вы только перенаправляете покупателя на их страницу оплаты
- Политика конфиденциальности - обязательна по закону. Опишите какие данные собираете и зачем
- Согласие на обработку данных - галочка "Я согласен на обработку персональных данных" при оформлении заказа
- Резервные копии - ежедневное автоматическое резервное копирование базы данных. Если что-то сломается - вы восстановите данные за минуты, а не за дни
- Защита от SQL-инъекций и XSS - это атаки, когда злоумышленник вводит вредоносный код в поля ввода (например, в строку поиска). Современные фреймворки (Next.js, React) защищают от этого автоматически, но проверить стоит
Мобильная версия: 75% ваших покупателей - с телефона
Это не преувеличение. По данным Яндекса, в 2025-2026 году 75% трафика интернет-магазинов - мобильный. Если ваш сайт неудобен на телефоне - вы теряете 3 из 4 потенциальных покупателей.
Что значит "удобен на мобильном":
- Адаптивная верстка - сайт автоматически подстраивается под размер экрана
- Большие кнопки - палец толще курсора мыши. Минимальный размер кнопки - 44x44 пикселя
- Быстрая загрузка - на мобильном интернет часто медленнее. Оптимизируйте изображения, минимизируйте JavaScript
- Удобная навигация - "гамбургер-меню" (три полоски) вместо длинной строки ссылок
- Простое оформление - автозаполнение полей, маска для телефона, клавиатура с цифрами для ввода номера
- Фото во всю ширину - на маленьком экране маленькие фото не работают
Проверить мобильную версию можно бесплатно: откройте свой сайт на телефоне и попробуйте оформить заказ. Если хоть раз пришлось "щипать" экран для увеличения или промахнулись мимо кнопки - нужно исправлять.
Сколько стоит интернет-магазин в 2026 году
Самый частый вопрос: "Сколько стоит сделать интернет-магазин?" Честный ответ: зависит от того, что вам нужно.
Вариант 1: Конструктор (Tilda, InSales) - от 0 до 30 000 руб/мес
- Плюсы: быстро (1-2 недели), дёшево, не нужен программист
- Минусы: ограниченные возможности, шаблонный дизайн, сложно масштабировать. Когда у вас 10 000 товаров и 1000 заказов в день - конструктор не справится
- Подходит: для тестирования идеи, до 100 товаров, до 50 заказов в день
Вариант 2: CMS (1С-Битрикс, OpenCart) - от 50 000 до 300 000 руб
- Плюсы: много готовых модулей, интеграция с 1С, большое сообщество
- Минусы: медленная загрузка (особенно Битрикс), устаревшие технологии, дорогая доработка
- Подходит: средний бизнес, 100-10 000 товаров, нужна интеграция с 1С
Вариант 3: Индивидуальная разработка (Next.js, React) - от 300 000 до 1 500 000 руб
- Плюсы: максимальная скорость загрузки, любой функционал, уникальный дизайн, легко масштабируется
- Минусы: дороже, дольше (1-3 месяца)
- Подходит: серьёзный бизнес, 1000+ товаров, высокие требования к скорости и UX
Наша рекомендация: если вы только начинаете - запустите MVP (минимальный жизнеспособный продукт) на конструкторе за неделю. Проверьте спрос, получите первые продажи. Когда убедитесь, что бизнес работает - переходите на индивидуальную разработку. Так вы не потратите 500 000 руб на магазин, который никому не нужен.
Наш подход: как мы создаём интернет-магазины
В Enot Software мы создаём интернет-магазины на современном стеке (Next.js, React, TypeScript), который обеспечивает:
- Скорость загрузки менее 1 секунды - по данным Google, каждая дополнительная секунда загрузки снижает конверсию на 7%. Наши магазины набирают 90+ баллов в PageSpeed
- SEO "из коробки" - серверный рендеринг, Schema.org разметка, автоматический sitemap, оптимизированные метатеги. Ваш магазин начинает индексироваться с первого дня
- Интеграция с любыми системами - 1С, МойСклад, СДЭК, ЮKassa, Telegram-боты. Или кастомная CRM, если вам нужно больше, чем даёт Битрикс
- Мобильная версия - не "адаптивная верстка для галочки", а полноценный мобильный опыт, где удобно покупать
- AI-функции - умный поиск с пониманием опечаток и синонимов, персональные рекомендации, чат-бот для поддержки
Мы не используем конструкторы и CMS - каждый магазин разрабатывается с нуля под ваш бизнес. Это стоит дороже Tilda, но окупается за 3-6 месяцев за счёт более высокой конверсии и SEO-трафика.
Чек-лист: что должно быть в интернет-магазине
Используйте этот чек-лист при создании или проверке вашего магазина:
Каталог и товары:
- Качественные фото (минимум 3 на товар)
- Подробные описания и характеристики
- Фильтры и сортировка
- Умный поиск с подсказками
- Отзывы и рейтинг
- Блок "С этим товаром покупают"
Корзина и оформление:
- Покупка без регистрации
- Минимум полей в форме заказа
- Стоимость доставки видна сразу
- Несколько способов оплаты (карта, СБП, наличные)
- Напоминание о брошенной корзине
Доставка:
- Минимум 2 способа (курьер + самовывоз)
- Расчёт стоимости на странице товара
- Отслеживание посылки
SEO и маркетинг:
- Уникальные title и description для каждого товара
- Schema.org разметка
- Яндекс Метрика с e-commerce модулем
- Яндекс Вебмастер
- Мобильная версия
- SSL-сертификат (HTTPS)
Личный кабинет и сервис:
- История заказов
- Автоматические уведомления (email, SMS)
- Избранное
- Бонусная программа
Итого: интернет-магазин - это система, а не сайт
Современный интернет-магазин - это не "каталог с кнопкой Купить". Это сложная система, где каждый элемент влияет на продажи: от скорости загрузки до текста в email-уведомлении.
Не пытайтесь сделать всё сразу. Начните с MVP: каталог + корзина + оплата + доставка. Запустите, получите первые продажи, послушайте клиентов - и постепенно добавляйте остальное: личный кабинет, умный поиск, бонусную программу, автоматические рассылки.
Главное - начать. Каждый день без интернет-магазина - это деньги, которые зарабатывают ваши конкуренты.
В нашей компании мы разрабатываем интернет-магазины "под ключ": от проектирования и дизайна до интеграции с платёжными системами и службами доставки. Мы используем современные технологии (Next.js, React), которые обеспечивают быструю загрузку и высокие позиции в поисковых системах. Расскажите нам о вашем проекте - мы подберём оптимальное решение для вашего бизнеса и бюджета.