Введение: зачем нужен YML и почему Excel?
Формат YML (Yandex Market Language) стал стандартом для обмена данными о товарах с Яндекс.Маркетом, Ozon и другими маркетплейсами. Но вручную создавать такой файл — мучительное занятие, особенно если у вас тысячи позиций. Здесь на помощь приходит Excel: его табличная структура идеально подходит для подготовки данных перед конвертацией.
Проблема в том, что прямого экспорта из Excel в YML нет. Нужно либо использовать промежуточные форматы (CSV, XML), либо писать скрипты. В этой статье разберём все рабочие способы 2026 года — от ручного редактирования до автоматизации через Power Query и макросы. Вы узнаете, как избежать типичных ошибок (например, некорректных тегов <currency> или <categoryId>), которые приводит к отказу маркетплейсов принимать ваш фид.
Важно: если вы работаете с Google Таблицами, принципы те же, но инструменты другие — об этом отдельный раздел в конце статьи.
1. Подготовка данных в Excel: структура и обязательные поля
Прежде чем конвертировать, нужно привести таблицу к виду, который поймёт YML. Маркетплейсы требуют строгой структуры: отсутствие лишних столбцов, корректные названия полей и обязательные атрибуты. Вот минимальный набор колонок, которые должны быть в вашем Excel:
- 📌 id — уникальный идентификатор товара (только цифры или буквы латиницы)
- 🏷️ name — название товара (максимум 255 символов, без HTML-тегов)
- 💰 price — цена в числовом формате (без валюты, только цифры)
- 📦 categoryId — ID категории из классификатора Яндекса
- 📎 url — ссылка на товар на вашем сайте (с
https://) - 📷 picture — URL главного изображения (минимум 1, максимум 10)
Дополнительные поля (необязательные, но рекомендуемые): vendor, model, description, param (характеристики). Обратите внимание: Яндекс.Маркет требует, чтобы поле description содержало не менее 30 символов и не было копией названия.
| Поле в YML | Название столбца в Excel | Тип данных | Обязательно? |
|---|---|---|---|
<id> |
ID | Текст/число | Да |
<name> |
Название | Текст | Да |
<price> |
Цена | Число | Да |
<categoryId> |
Категория_Yandex | Число | Да |
<picture> |
Фото_1 | Текст (URL) | Да (хотя бы 1) |
⚠️ Внимание: Если в вашем Excel есть ячейки с формулами (например, =B2*1.2 для наценки), обязательно преобразуйте их в значения перед экспортом. Для этого выделите диапазон, скопируйте (Ctrl+C), затем выполните Правка → Специальная вставка → Значения.
2. Способ 1: Конвертация через CSV + онлайн-конвертер
Самый простой метод для новичков — экспортировать данные из Excel в CSV, а затем преобразовать в YML с помощью бесплатных сервисов. Подходит для фидов до 5 000 товаров.
Шаги:
- В Excel нажмите
Файл → Сохранить каки выберите форматCSV (разделители — запятые). - Откройте один из онлайн-конвертеров:
- 🌐 YML-Online (поддерживает шаблоны для Яндекса и Ozon)
- 🌐
Проверьте длину URL (максимум 512 символов)
-->
⚠️ Внимание: Онлайн-сервисы часто ограничивают размер файла (обычно до 10 МБ). Если ваш CSV больше, разбейте его на части или используйте локальные инструменты (см. следующий раздел).
📊 Какой маркетплейс вам нужен?Яндекс.МаркетOzonWildberriesДругойНе знаю3. Способ 2: Автоматизация через Power Query (Excel 2016+)
Для пользователей Excel 2016 и новее доступен мощный инструмент Power Query, который позволяет преобразовывать данные без программирования. Этот метод подходит для регулярного обновления фидов.
Инструкция:
- Перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query:
- 🔄 Преобразуйте столбцы к нужным типам (например,
price— в число). - 🧹 Удалите пустые строки (
Главная → Удалить строки → Удалить пустые). - 📝 Добавьте недостающие поля (например,
currencyId="RUR") черезДобавить столбец → Пользовательский столбец.
- 🔄 Преобразуйте столбцы к нужным типам (например,
- Перейдите на вкладку
- Экспортируйте результат в XML, а затем вручную оберните в теги
<yml_catalog>и<shop>.
Пример формулы для пользовательского столбца с валютой:
= "<currencyId>RUR</currencyId><categories><category id="" & Text.From([categoryId]) & "">" & [Категория] & "</category></categories>"
Как добавить несколько валют?
Если вы работаете с мультивалютными фидами, в Power Query можно создать условный столбец:
= if [Валюта] = "USD" then "<currencyId>USD</currencyId>" else "<currencyId>RUR</currencyId>"
Но помните: Яндекс.Маркет принимает только рубли (RUR) или тенге (KZT) для казахстанских продавцов.
⚠️ Внимание: Power Query не генерирует полноценный YML — он только подготавливает данные. Для финального XML-представления потребуется дополнительная обработка (например, через XSLT или макрос).
4. Способ 3: Макросы VBA для продвинутых пользователей
Если вам нужно полностью автоматизировать процесс, VBA-макросы в Excel справятся с задачей. Этот метод требует базовых знаний программирования, но даёт максимальную гибкость.
Пример макроса для генерации YML:
Sub GenerateYML()
Dim ws As Worksheet
Dim rowCount As Long, i As Long
Dim ymlContent As String
Set ws = ThisWorkbook.Sheets("Товары") ' имя вашего листа
rowCount = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Заголовок YML
ymlContent = "" & vbCrLf
ymlContent = ymlContent & "" & vbCrLf
ymlContent = ymlContent & "" & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Range("B1").Value & " " & vbCrLf ' название магазина
ymlContent = ymlContent & " " & ws.Range("C1").Value & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Range("D1").Value & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
' Добавьте категории здесь
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
' Данные товаров
For i = 2 To rowCount
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Cells(i, 2).Value & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Cells(i, 3).Value & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Cells(i, 4).Value & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Cells(i, 5).Value & " " & vbCrLf
ymlContent = ymlContent & " " & ws.Cells(i, 6).Value & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
Next i
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & " " & vbCrLf
ymlContent = ymlContent & ""
' Сохранение файла
Dim filePath As String
filePath = Environ("USERPROFILE") & "\Desktop\feed.yml"
Open filePath For Output As #1
Print #1, ymlContent
Close #1
MsgBox "YML-файл создан на рабочем столе!", vbInformation
End Sub
Чтобы запустить макрос:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Настройте имена листа и столбцов под вашу таблицу.
- Запустите макрос кнопкой
F5. - ❌ Некорректная кодировка → Сохраняйте файл в
UTF-8 без BOM(используйте Notepad++ или VS Code для проверки). - ❌ Отсутствует обязательное поле → Проверьте, что все товары имеют
id,priceиcategoryId. - ❌ Неверный формат цены → Цена должна быть числом без разделителей (например,
1999.99, а не1 999,99 руб.). - ❌ Дублирующиеся ID → Используйте функцию
=COUNTIF(A:A, A2), чтобы найти повторяющиеся идентификаторы. - ❌ Невалидные URL → Убедитесь, что все ссылки начинаются с
http://илиhttps://и не содержат пробелов. - 🔍 Валидатор YML-Online (показывает ошибки с указанием строк).
- 🔍 Инструмент Яндекса (проверяет соответствие требованиям Маркета).
5. Типичные ошибки и как их избежать
Даже опытные пользователи сталкиваются с проблемами при загрузке YML на маркетплейсы. Вот самые распространённые ошибки и их решения:
Для проверки готового YML используйте:
6. Альтернативы: Google Таблицы и специализированные программы
Если вы работаете в Google Таблицах, процесс будет аналогичным, но с другими инструментами:
- Используйте
Файл → Скачать → CSVдля экспорта. - Для автоматизации применяйте Google Apps Script (аналог VBA). Пример скрипта для генерации YML:
function generateYML() {const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");
const data = sheet.getDataRange().getValues();
let yml = '\n
\n \n'; data.forEach((row, i) => {
if (i === 0) return; // пропускаем заголовки
yml += `
\n`; yml += `
${row[1]} \n`;yml += `
${row[2]} \n`;yml += `\n`;
});
yml += '\n';
DriveApp.createFile('feed.yml', yml, 'text/xml');
}
Специализированные программы для работы с YML:
- 💻 1C:Предприятие (модуль "Обмен данными с Яндекс.Маркет").
- 💻 МойСклад (автоматический экспорт фидов).
- 💻 LitCommerce (для мультимаркетплейсовых решений).
7. Оптимизация YML для Яндекс.Маркета: секреты успешной загрузки
Чтобы ваш фид прошёл модерацию с первого раза, следуйте этим рекомендациям:
- 📈 Категории: Используйте актуальный классификатор Яндекса (скачать можно здесь). Ошибка в
categoryId— самая частая причина отказа. - 🖼️ Изображения: Размер не менее 800×800 px, формат JPEG/PNG, вес до 10 МБ. Яндекс блокирует фиды с битыми ссылками на фото.
- 📝 Описания: Должны быть уникальными для каждого товара. Копипаст из названия или других сайтов приведёт к понижению в выдаче.
- 🔄 Обновления: Яндекс рекомендует обновлять фид не реже 1 раза в сутки. Для этого настройте автоматическую выгрузку через
cron(Linux) или Планировщик задач (Windows).
Для ускорения индексации добавьте в YML теги:
<sales_notes>— условия продажи (например, "Доставка по России бесплатно").<delivery>— информация о доставке (обязательно для некоторых категорий).<pickup>— возможность самовывоза.
FAQ: Частые вопросы по конвертации Excel в YML
Можно ли создать YML из Excel без программирования?
Да, для этого подойдёт Способ 1 (CSV + онлайн-конвертер) или Способ 2 (Power Query). Оба метода не требуют знания кода, но имеют ограничения по размеру файла (обычно до 10 000 товаров). Для больших каталогов придётся использовать макросы или специализированное ПО.
Как добавить несколько фотографий для одного товара?
В YML фотографии перечисляются внутри тега <picture> через запятую:
<picture>https://site.ru/photo1.jpg</picture>
<picture>https://site.ru/photo2.jpg</picture>
В Excel для этого нужно создать отдельные столбцы (например, Фото_1, Фото_2) и объединить их при конвертации.
Почему Яндекс.Маркет не принимает мой YML?
Самые частые причины:
- Несоответствие структуры (отсутствует обязательный тег, например,
<currencies>). - Некорректные символы в названиях или описаниях (например,
&вместо&). - Невалидные
categoryId(устаревшие или несуществующие категории). - Превышен лимит по размеру файла (максимум 50 МБ для Яндекса).
Используйте валидатор Яндекса для точной диагностики.
Как автоматизировать обновление YML при изменении цен в Excel?
Настройте триггеры:
- В Excel: Макрос с таймером (
Application.OnTime). - В Google Таблицах: Триггер в Google Apps Script (
Time-driven). - На сервере:
cron-задача для запуска скрипта конвертации (например, на Python).
Пример для VBA:
Sub ScheduleUpdate()
Application.OnTime Now + TimeValue("01:00:00"), "GenerateYML" ' запуск через час
End Sub
Можно ли в YML указать скидки или акции?
Да, для этого используйте теги:
<oldprice>2999</oldprice>
<price>1999</price>
<sales_notes>Скидка 33% до 31.12.2026</sales_notes>
Убедитесь, что oldprice больше price, иначе Яндекс заблокирует фид.