Разработка · 7 мин чтения

Автозагрузка объявлений на Авито: что указывать в XML-фиде

Автозагрузка объявлений на Авито работает через один и тот же механизм независимо от ниши: площадка забирает у вас XML-файл по прямой ссылке и обновляет по нему объявления, создаёт новые, меняет цены, снимает с публикации проданное. На практике у большинства моих клиентов проблема не в самой автозагрузке, а в том, что фид собран не по формату: не хватает обязательного поля, категория указана неверно, или ссылка на файл недоступна роботу Авито. Дальше разберу, что реально должно быть в фиде, какие поля Авито проверяет жёстче остальных и как я собираю выгрузку для разных движков, от WooCommerce до самописных Python-скриптов.

Зачем нужна автозагрузка и когда она себя окупает

Вручную заводить объявления имеет смысл, пока их меньше 15-20. Дальше начинается рутина: цену поменяли в интернет-магазине, а в Авито она осталась старой, товар продался, а объявление всё ещё висит и собирает бесполезные звонки. Автозагрузка снимает эту рассинхронизацию: один источник данных, один файл, который Авито периодически перечитывает.

Чаще всего ко мне приходят с этой задачей три типа клиентов. Первый - интернет-магазин на WooCommerce или Tilda, для которого Авито это дополнительный канал продаж поверх основного сайта. Второй - агентства недвижимости и автодилеры с каталогом в 50-500 позиций, где вручную это уже физически тяжело. Третий - сервисные компании, которые публикуют услуги пачками по городам и районам.

Если у вас 5-10 объявлений и они меняются раз в месяц, автозагрузка скорее лишняя сложность. Настройка фида, тестирование и разбор ошибок модерации съедят больше времени, чем ручное редактирование карточек.

Структура XML-фида для выгрузки объявлений: что должно быть внутри

Фид для Авито это XML-файл с корневым элементом Ads и набором Ad внутри, каждый Ad описывает одно объявление. У корневого элемента указывается атрибут target со значением площадки, дальше идёт список объявлений с полями.

Вот упрощённый пример одного объявления. Я оставил только базовый набор полей, дальше по тексту разберу, что можно добавить под конкретную категорию. Перед боевой выгрузкой всегда сверяюсь с актуальным шаблоном, который можно скачать в разделе автозагрузки личного кабинета, потому что состав полей по отдельным категориям площадка иногда уточняет.

<Ads formatVersion="3" target="Avito.ru">
    <Ad>
        <Id>SKU-10234</Id>
        <AvitoId></AvitoId>
        <Category>Ремонт и строительство</Category>
        <Address>Москва, ул. Ленина, 10</Address>
        <Price>15000</Price>
        <Description><![CDATA[Описание товара или услуги, без HTML-тегов]]></Description>
        <ManagerName>Никита</ManagerName>
        <ContactPhone>+7 900 000-00-00</ContactPhone>
        <Photos>
            <Photo url="https://example.ru/images/10234-1.jpg"/>
            <Photo url="https://example.ru/images/10234-2.jpg"/>
        </Photos>
    </Ad>
</Ads>

Поле Обязательное Что туда пишу
Id да Уникальный и стабильный идентификатор товара в моей базе, не меняется между выгрузками
AvitoId нет Идентификатор, который Авито присваивает объявлению после первой публикации, нужен чтобы обновлять карточку, а не дублировать
Category да Название строго по классификатору Авито, а не по внутренней рубрике каталога
Address да Адрес, который площадка может определить на карте, город указываю обязательно
Price да Целое число в рублях без пробелов и символа валюты
Description да Текст без HTML-тегов, оборачиваю в CDATA, чтобы спецсимволы не ломали парсинг
Photos формально нет, но нужен для нормальной модерации Прямые https-ссылки на изображения, доступные без авторизации
ManagerName, ContactPhone да Контакт, на который придут обращения с объявления

Категории и характеристики: где чаще всего отклоняют объявления

У каждой категории Авито свой набор дополнительных характеристик: для недвижимости это площадь, этаж и количество комнат, для транспорта марка, модель, год выпуска и пробег. Часть характеристик обязательна именно для конкретной категории, хотя в общей структуре фида они формально необязательны.

Практический прием, который экономит время: перед первой массовой загрузкой беру 3-5 объявлений из разных категорий и гоняю их отдельным маленьким файлом. Смотрю отчёт по импорту в личном кабинете, там площадка построчно указывает, какое поле не устроило и почему. Дешевле поймать это на пяти объявлениях, чем на выгрузке в тысячу позиций, где часть отклонится молча.

Самая частая причина отклонения, с которой я сталкивался на практике: в CRM клиента категория называется, скажем, «Стройматериалы», а точного соответствия под таким названием в классификаторе Авито нет. Объявление либо уходит в отказ, либо попадает не в ту ветку и теряет показы.

Фото, цена, описание и контакты в фиде

Ссылки на фотографии должны быть прямыми и доступными без авторизации по https. Я всегда проверяю их отдельным запросом перед загрузкой фида, потому что если сервер отдаёт картинку только залогиненным пользователям или закрывает её за CDN с проверкой referer, робот Авито её просто не увидит.

Цену указываю целым числом в рублях, без пробелов, без символа валюты и без копеек. Если в системе клиента цена хранится с НДС отдельной строкой или со скидкой, в фид кладу уже итоговую сумму, которую покупатель увидит на карточке.

Описание оборачиваю в CDATA, чтобы амперсанды и угловые скобки из текста не ломали парсинг XML. HTML-разметку внутри описания площадка не отображает, переносы строк делаю обычными символами перевода строки, а не тегами.

Телефон и имя менеджера беру из тех же полей, что уже используются на сайте для приёма заявок, чтобы не плодить отдельную точку правды. Если у клиента подключена IP-телефония с подменой номера под источник обращения, для Авито обычно выделяю отдельный статичный номер, иначе аналитику по каналу собрать сложно.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как собрать фид на практике: WooCommerce, Tilda-скрипты и n8n

Для WooCommerce обычно не пишу генератор с нуля, беру плагин экспорта в XML и дорабатываю маппинг: категории WooCommerce нужно вручную сопоставить с категориями классификатора Авито, а недостающие поля вроде адреса объекта добавляю через кастомные атрибуты товара.

У Tilda есть собственный API, через который можно забрать список товаров каталога. Для клиентов на Тильде я пишу отдельный скрипт, который обращается к API, преобразует товары в нужную структуру Ad и кладёт готовый XML-файл на хостинг по стабильному адресу, чтобы Авито могло забирать его по расписанию.

Для регулярного обновления без ручного участия использую n8n: нода по расписанию запускает workflow, HTTP-запрос забирает актуальные данные из CRM или базы, узел трансформации собирает XML, а следующий шаг выгружает файл на сервер или в облачное хранилище с публичной ссылкой. Отдельно ставлю проверку на количество объявлений в получившемся файле: если их вдруг ноль, значит источник данных отдал пустой ответ, и обновление лучше остановить, а не публиковать пустой фид поверх рабочего. Если каталог меняется несколько раз в день и нужна именно такая автоматизация обновления фида в n8n, это отдельная настройка workflow под конкретный источник данных.

Для мониторинга ошибок импорта у одного клиента поднимал телеграм-бота на aiogram: раз в сутки бот дёргает отчёт по последней выгрузке и присылает в чат количество отклонённых объявлений с причинами, чтобы не заходить в личный кабинет вручную каждый день.

Если каталог небольшой и данные лежат не в CMS, а в собственной базе или 1С, проще написать скрипт на Python по cron: выгрузка из источника, сборка XML средствами стандартной библиотеки, отправка на сервер по SFTP и запись лога с количеством обработанных позиций.

Способ получения фида Что нужно настроить Когда использую
Плагин экспорта для WooCommerce Маппинг категорий WooCommerce на классификатор Авито, кастомные поля товара под Category и Address Каталог уже ведётся в WordPress, нужно просто расширить канал продаж
Скрипт поверх API Tilda Забор товаров через API Тильды, сборка нужной структуры Ad, публикация файла по стабильному адресу Лендинги и магазины на Тильде без готового шаблона под формат Авито
Workflow в n8n Нода по расписанию, HTTP-запрос за данными, узел трансформации в XML, шаг выгрузки на сервер Каталог меняется часто, обновление фида нужно несколько раз в сутки
Python-скрипт по cron Выгрузка из БД или 1С, сборка XML, отправка по SFTP, лог ошибок Источник данных не CMS, а собственная база или учётная система

Расписание обновления и подключение ссылки в кабинете Авито

Ссылку на файл фида добавляю в настройках автозагрузки в личном кабинете Авито, дальше площадка сама забирает файл по расписанию. Частоту обновления подбираю под то, как часто реально меняются данные: для магазина с активными продажами обновляю фид несколько раз в сутки, чтобы цена и наличие не расходились с сайтом, для каталога услуг с редкими изменениями достаточно одного обновления в день.

Файл должен отдаваться по стабильному URL без редиректов и без блокировки по user-agent, иначе робот площадки не сможет забрать его вовремя, и объявления начнут снимать с публикации как устаревшие.

После каждой выгрузки проверяю отчёт об импорте: сколько объявлений создано, сколько обновлено и сколько отклонено с причиной. На этом этапе обычно и всплывают точечные проблемы вроде неверной категории у одной позиции или пропавшей фотографии.

Условия и возможности Авито меняются, поэтому перед запуском я уточняю их у самого сервиса.

Частые вопросы

Как часто нужно обновлять фид для автозагрузки объявлений на Авито

Зависит от того, как часто меняются цена и наличие. Для интернет-магазина с активным оборотом ставлю обновление несколько раз в сутки, для каталога услуг или недвижимости хватает одного раза в день.

Что делать, если после автозагрузки часть объявлений не проходит модерацию

Открываю отчёт по последнему импорту в личном кабинете, там площадка указывает причину по каждой отклонённой позиции. Чаще всего это неверная категория, отсутствующее обязательное поле для конкретной категории или недоступная по ссылке фотография.

Можно ли обновлять уже опубликованные объявления, а не создавать новые при каждой выгрузке

Да, для этого используется поле AvitoId, которое площадка присваивает объявлению после первой публикации. Забираю его из отчёта по импорту и подставляю в следующую выгрузку фида, тогда Авито обновляет существующую карточку вместо создания дубля.

Нужен ли отдельный хостинг для XML-файла фида

Нет, файл может лежать на том же сервере, где размещён сайт, главное, чтобы ссылка отдавалась стабильно по https без авторизации и редиректов.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно