XML-фид — это файл со всеми вашими объявлениями в виде тегов, который Авито забирает по ссылке и раскладывает в карточки. Он нужен там, где объявлений много и они регулярно меняются: цены, наличие, новые позиции, снятые позиции.
Мы формируем такие фиды каждый день, поэтому ниже — не пересказ общих требований, а разбор структуры файла по тегам: что внутри, чем отличается обязательное от необязательного, где чаще всего ломается выгрузка и как проверить фид до того, как его увидит площадка.
Как устроен файл целиком
У фида два уровня: корневой элемент со списком и одно объявление внутри.
| Уровень | Что это |
|---|---|
<Ads> | корень файла: содержит все объявления и атрибуты формата |
<Ad> | одно объявление со своим набором тегов |
У корневого элемента задаются два атрибута: версия формата и площадка-получатель. В фиде, который отдаём мы, это formatVersion="3" и target="Avito.ru". Без них файл может быть принят, но лучше их не опускать: они однозначно говорят площадке, по какой схеме читать содержимое.
| Скелет файла |
|---|
<?xml version="1.0" encoding="UTF-8"?> |
<Ads formatVersion="3" target="Avito.ru"> |
<Ad> … теги первого объявления … </Ad> |
<Ad> … теги второго объявления … </Ad> |
</Ads> |
Базовые теги объявления
Этот набор повторяется в любой категории. Порядок тегов внутри <Ad> значения не имеет, важно их наличие и содержимое.
| Тег | Что содержит | Комментарий |
|---|---|---|
<Id> | ваш внутренний идентификатор позиции | ключ, по которому площадка понимает, что это то же объявление. Сменили Id — получите новую карточку без истории |
<Category> | название категории Авито | берётся из справочника площадки, а не придумывается |
<Title> | заголовок объявления | до 50 символов |
<Description> | описание | передаётся в CDATA, допускает ограниченный HTML |
<Price> | цена целым числом | без пробелов, знаков валюты и копеек |
<Address> | адрес одной строкой | по нему площадка определяет геопозицию |
<ContactPhone> | телефон для связи | должен быть подтверждён в аккаунте |
<ManagerName> | имя контактного лица | показывается покупателю |
<ContactMethod> | способ связи | например, звонки и сообщения |
Категория и поля, которые зависят от неё
Кроме базового набора у каждой категории есть свои поля: у мебели — материал и размеры, у авто — марка, модель, поколение, тип кузова и число дверей, у услуг — состав работ. Такие поля добавляются в <Ad> обычными тегами с именами из шаблона Авито.
Ограничение на имена простое: латинские буквы, цифры и подчёркивание, начинается с буквы или подчёркивания. Кириллица в именах тегов не допускается — сами значения при этом на русском.
Как передать несколько значений одного поля
Если поле допускает набор значений — например, опции автомобиля или удобства в квартире, — значения перечисляются вложенными тегами <Option>:
| Несколько значений одного поля |
|---|
<Options> |
<Option>Кондиционер</Option> |
<Option>Парктроник</Option> |
</Options> |
Фотографии: самая частая ошибка в фиде
Изображения передаются не текстом внутри тега, а атрибутом url — это место, где ошибаются чаще всего:
| Как правильно |
|---|
<Images> |
<Image url="https://example.com/photo-1.jpg"/> |
<Image url="https://example.com/photo-2.jpg"/> |
</Images> |
- ссылки должны быть абсолютными и открываться без авторизации — относительный путь площадка не развернёт;
- порядок тегов задаёт порядок фотографий, первое становится главным;
- ссылка должна оставаться живой всё время публикации: удалили файл в хранилище — фото пропадёт из карточки.
Если снимки лежат в облаке, проверьте, что ссылка ведёт на сам файл, а не на страницу просмотра. Ссылка вида «поделиться» обычно отдаёт HTML-страницу, и площадка получит вместо картинки разметку.
Видео
Ролик передаётся отдельным тегом <VideoFileURL> — одной ссылкой, тоже абсолютной. Подробно про требования к самому ролику и где он показывается — в статье про видео в объявлении на Авито.
Расписание публикации: DateBegin и DateEnd
Фид умеет не только публиковать, но и планировать. Два тега задают, когда объявление появится и когда снимется:
| Тег | Что задаёт | Формат |
|---|---|---|
<DateBegin> | дата и время публикации | ГГГГ-ММ-ДД ЧЧ:ММ:СС |
<DateEnd> | дата и время снятия | ГГГГ-ММ-ДД ЧЧ:ММ:СС |
Это удобно для сезонных предложений и для равномерной подачи каталога: вместо того чтобы залить тысячу карточек за один день, вы расставляете даты и публикуете их частями. Оба тега необязательны — без них объявление публикуется при ближайшей выгрузке и висит, пока вы не уберёте строку из файла.
Услуги: блок PriceList
Для категорий услуг в объявление добавляют прайс-лист — перечень работ с ценами. Он собирается блоком <PriceList>, внутри которого идут отдельные услуги:
| Тег внутри услуги | Что содержит | Обязателен |
|---|---|---|
<ServiceName> | название услуги из справочника | да |
<ServicePrice> | цена целым числом | да |
<ServicePriceType> | тип цены: за единицу, за час, за метр и так далее | да |
<ServiceTitle> | своё название работы | нет |
<ServiceStartingPrice> | пометка «цена от» | нет |
Если в услуге не хватает названия, цены или типа цены, строка не попадёт в фид: неполная услуга отбрасывается целиком, а не публикуется наполовину. Цена при этом должна быть числом — «от 2000», «2 000 ₽» или «договорная» не пройдут.
Описание: разметка и её подводные камни
Описание передаётся внутри CDATA — так теги внутри не приходится экранировать, и площадка читает их как разметку, а не как текст. Набор разрешённых тегов ограничен:
| Тег | Для чего |
|---|---|
<p> | абзац |
<br> | перенос строки |
<strong> | жирный текст |
<em> | курсив |
<ul> <ol> <li> | списки |
Всё остальное — <div>, <span>, <h2>, <a>, <table> — в описание не проходит. И здесь начинаются нюансы, из-за которых текст в карточке выглядит не так, как в вашем файле.
Жирный — только strong, но не b
Устаревший <b> в список не входит: тег либо игнорируется, либо роняет проверку описания. То же с <i> — вместо него <em>. Если вы генерируете фид из CMS или выгружаете описания с сайта, проверьте это в первую очередь: большинство редакторов по умолчанию отдают именно <b>, и текст приезжает без выделений.
Вложенность тоже не работает: <strong> внутри <strong> разворачивается в один, а пустой <strong></strong> просто удаляется. Выделять по половине слова или ставить жирный вокруг пробела бессмысленно.
Отступы: пробелами их не сделать
Самое частое разочарование. HTML схлопывает подряд идущие пробелы в один, поэтому выровнять текст пробелами или табуляцией не получится — в карточке всё сожмётся в одну строку. Привычный обходной приём с неразрывным пробелом тоже не сработает: в описании недопустим и заменяется обычным пробелом. Это касается и его числовых форм —  ,   — и невидимого символа U+00A0, который часто приезжает копипастом из Word.
Единственный способ задать структуру — абзацы, переносы строк и списки. Если нужен визуальный отступ у пункта, используйте маркер в начале строки, а не пробелы перед ним.
Пустые строки: больше одной не бывает
Три и более переноса подряд схлопываются до двух — то есть между блоками остаётся ровно одна пустая строка, сколько бы <br> вы ни поставили. Пустой абзац <p></p>, которым иногда пытаются добавить воздух, удаляется целиком. Строка, состоящая только из пробелов, считается пустой.
Что получится на самом деле
| Как пишут в фиде | Что увидит покупатель |
|---|---|
**Доставка** | звёздочки в тексте: Markdown не работает |
<b>Доставка</b> | текст без выделения или ошибка описания |
Отступ | обычный пробел, отступа не будет |
<p></p> для пустой строки | абзац удалится |
пять <br> подряд | останется две пустые строки |
<p style="…"> | ошибка: атрибуты в тегах запрещены |
<a href="…"> | ссылка не пройдёт: тег не в списке |
Требования к самому файлу
- кодировка UTF-8 и объявление кодировки в первой строке;
- файл доступен по прямой ссылке без пароля и редиректов — площадка забирает его сама по расписанию;
- ссылка не меняется: адрес фида указывается в кабинете один раз, менять его при каждой выгрузке не нужно;
- файл всегда полный. В фиде должны быть все актуальные объявления: пропала строка — карточка снимается с публикации;
- валидный XML: незакрытый тег или лишний символ ломают разбор всего файла, а не одной строки.
Как проверить фид перед загрузкой
-
Откройте файл в браузере
Если браузер показывает ошибку разбора, дальше идти нет смысла: XML невалиден. Так ловится большинство поломок.
-
Проверьте кодировку
Русский текст не должен превращаться в вопросительные знаки и кракозябры.
-
Откройте три-четыре ссылки на фото
Каждая должна открывать сам файл изображения, а не страницу хранилища.
-
Сверьте Id с прошлой выгрузкой
Идентификаторы должны совпадать для тех позиций, которые вы обновляете, иначе объявления переопубликуются.
-
Проверьте цены
Только цифры: без пробелов, валюты и копеек.
-
Загрузите пилот из десяти объявлений
И дождитесь отчёта. Одна итерация на десяти позициях дешевле разбора ошибок по всему каталогу.
-
Прочитайте отчёт целиком
Даже если всё опубликовалось: предупреждения показывают, какие поля площадка не приняла.
Что чаще всего ломает выгрузку
- сменился Id — вместо обновления получаете новые карточки без истории;
- ссылка на фото ведёт на страницу просмотра, а не на файл;
- URL изображения относительный, а не абсолютный;
- категория написана своими словами, а не взята из справочника Авито;
- в цене пробелы, валюта или слово «договорная»;
- в описании остался Markdown или запрещённые теги;
- кириллица в имени тега дополнительного поля;
- файл отдаётся с авторизацией или через редирект.
Фид валидный, а объявлений нет
Отдельная категория проблем, которую почти никогда не описывают: с файлом всё в порядке, ссылка открывается, XML разбирается — а карточки не появляются. Значит дело не в фиде, а в настройке на стороне кабинета. Четыре причины по частоте:
- в кабинете включён ручной режим загрузки. При нём файл по ссылке никто не забирает: площадка ждёт, что вы загрузите его руками. Самая обидная причина — человек часами проверяет теги, а достаточно переключить способ загрузки на «по ссылке» и указать адрес фида;
- не настроено расписание. Способ загрузки выбран верно, но время выгрузки не задано, поэтому обработка не запускается. Проверьте, что в кабинете стоит расписание, и помните: изменения в файле попадают в объявления не мгновенно, а к следующей выгрузке;
- у аккаунта нет доступа к автозагрузке. Она доступна не на всех тарифах Авито: если в кабинете нет самого раздела автозагрузки, вопрос решается тарифом, а не файлом;
- не приняты ключи доступа. Если публикация идёт через сервис или интеграцию, площадка может отвечать отказом на этапе авторизации — обычно это неверные или устаревшие Client ID и Client Secret. Где их взять и как обновить, разобрано в статье про Client ID и Client Secret Авито.
Порядок проверки простой: сначала кабинет, потом файл. Откройте раздел автозагрузки и убедитесь, что выбран способ «загрузка по ссылке», адрес фида совпадает с вашим и расписание задано. Если раздела нет вовсе — дело в тарифе. И только когда настройка подтверждена, имеет смысл возвращаться к тегам.
Порядок проверки простой: если объявлений нет вообще и отчёт пуст — ищите причину в кабинете. Если отчёт пришёл и в нём есть сообщения — причина уже в данных объявлений, и разбирать нужно конкретные формулировки.
Если собирать фид вручную не хочется
Фид имеет смысл писать самому, когда каталог живёт в вашей системе и выгрузка формируется автоматически. Если файл приходится собирать и обновлять руками, вы получаете вторую работу: следить за структурой, ссылками и актуальностью строк.
В Advify каталог собирается в интерфейсе, а фид сервис формирует и отдаёт площадке сам — со стабильными Id, абсолютными ссылками на изображения и проверкой разметки описания до отправки. Какой способ выбрать под ваш объём, разобрано в статье про способы автозагрузки.
Частые вопросы
Что такое XML-фид для Авито?
<Ads> и по одному <Ad> на объявление.Какие теги обязательны?
Можно ли сделать фид в Excel?
Как задать несколько фотографий?
<Images> перечисляются теги <Image>, у каждого ссылка в атрибуте url. Порядок тегов определяет порядок фото, первое становится главным.Почему объявления переопубликовались сами?
Можно ли запланировать публикацию через фид?
<DateBegin> и <DateEnd> в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС». Так удобно раскладывать большой каталог на несколько дней.Что будет, если убрать объявление из файла?
Почему в описании не работает жирный шрифт?
<b> — принимается только <strong>. Вторая частая причина: описание вставили в формате Markdown, и вместо выделения в карточке видны звёздочки.
Комментарии
Публикуются после модерации
Пока нет комментариев
Будьте первым — задайте вопрос или поделитесь опытом. Комментарий появится здесь после модерации.