Перейти к контенту

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

10 просмотров 0 комментариев
Как устроен XML-фид для Авито: корневой элемент, обязательные теги объявления, фотографии, расписание публикации и прайс-лист услуг, проверка файла перед загрузкой.
XML-фид для Авито: структура файла, обязательные теги и проверка

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 схлопывает подряд идущие пробелы в один, поэтому выровнять текст пробелами или табуляцией не получится — в карточке всё сожмётся в одну строку. Привычный обходной приём с неразрывным пробелом тоже не сработает: &nbsp; в описании недопустим и заменяется обычным пробелом. Это касается и его числовых форм — &#160;, &#xA0; — и невидимого символа U+00A0, который часто приезжает копипастом из Word.

Единственный способ задать структуру — абзацы, переносы строк и списки. Если нужен визуальный отступ у пункта, используйте маркер в начале строки, а не пробелы перед ним.

Пустые строки: больше одной не бывает

Три и более переноса подряд схлопываются до двух — то есть между блоками остаётся ровно одна пустая строка, сколько бы <br> вы ни поставили. Пустой абзац <p></p>, которым иногда пытаются добавить воздух, удаляется целиком. Строка, состоящая только из пробелов, считается пустой.

Что получится на самом деле

Как пишут в фидеЧто увидит покупатель
**Доставка**звёздочки в тексте: Markdown не работает
<b>Доставка</b>текст без выделения или ошибка описания
&nbsp;&nbsp;Отступобычный пробел, отступа не будет
<p></p> для пустой строкиабзац удалится
пять <br> подрядостанется две пустые строки
<p style="…">ошибка: атрибуты в тегах запрещены
<a href="…">ссылка не пройдёт: тег не в списке

Требования к самому файлу

  • кодировка UTF-8 и объявление кодировки в первой строке;
  • файл доступен по прямой ссылке без пароля и редиректов — площадка забирает его сама по расписанию;
  • ссылка не меняется: адрес фида указывается в кабинете один раз, менять его при каждой выгрузке не нужно;
  • файл всегда полный. В фиде должны быть все актуальные объявления: пропала строка — карточка снимается с публикации;
  • валидный XML: незакрытый тег или лишний символ ломают разбор всего файла, а не одной строки.

Как проверить фид перед загрузкой

  1. Откройте файл в браузере

    Если браузер показывает ошибку разбора, дальше идти нет смысла: XML невалиден. Так ловится большинство поломок.

  2. Проверьте кодировку

    Русский текст не должен превращаться в вопросительные знаки и кракозябры.

  3. Откройте три-четыре ссылки на фото

    Каждая должна открывать сам файл изображения, а не страницу хранилища.

  4. Сверьте Id с прошлой выгрузкой

    Идентификаторы должны совпадать для тех позиций, которые вы обновляете, иначе объявления переопубликуются.

  5. Проверьте цены

    Только цифры: без пробелов, валюты и копеек.

  6. Загрузите пилот из десяти объявлений

    И дождитесь отчёта. Одна итерация на десяти позициях дешевле разбора ошибок по всему каталогу.

  7. Прочитайте отчёт целиком

    Даже если всё опубликовалось: предупреждения показывают, какие поля площадка не приняла.

Что чаще всего ломает выгрузку

  • сменился Id — вместо обновления получаете новые карточки без истории;
  • ссылка на фото ведёт на страницу просмотра, а не на файл;
  • URL изображения относительный, а не абсолютный;
  • категория написана своими словами, а не взята из справочника Авито;
  • в цене пробелы, валюта или слово «договорная»;
  • в описании остался Markdown или запрещённые теги;
  • кириллица в имени тега дополнительного поля;
  • файл отдаётся с авторизацией или через редирект.

Фид валидный, а объявлений нет

Отдельная категория проблем, которую почти никогда не описывают: с файлом всё в порядке, ссылка открывается, XML разбирается — а карточки не появляются. Значит дело не в фиде, а в настройке на стороне кабинета. Четыре причины по частоте:

  • в кабинете включён ручной режим загрузки. При нём файл по ссылке никто не забирает: площадка ждёт, что вы загрузите его руками. Самая обидная причина — человек часами проверяет теги, а достаточно переключить способ загрузки на «по ссылке» и указать адрес фида;
  • не настроено расписание. Способ загрузки выбран верно, но время выгрузки не задано, поэтому обработка не запускается. Проверьте, что в кабинете стоит расписание, и помните: изменения в файле попадают в объявления не мгновенно, а к следующей выгрузке;
  • у аккаунта нет доступа к автозагрузке. Она доступна не на всех тарифах Авито: если в кабинете нет самого раздела автозагрузки, вопрос решается тарифом, а не файлом;
  • не приняты ключи доступа. Если публикация идёт через сервис или интеграцию, площадка может отвечать отказом на этапе авторизации — обычно это неверные или устаревшие Client ID и Client Secret. Где их взять и как обновить, разобрано в статье про Client ID и Client Secret Авито.

Порядок проверки простой: сначала кабинет, потом файл. Откройте раздел автозагрузки и убедитесь, что выбран способ «загрузка по ссылке», адрес фида совпадает с вашим и расписание задано. Если раздела нет вовсе — дело в тарифе. И только когда настройка подтверждена, имеет смысл возвращаться к тегам.

Порядок проверки простой: если объявлений нет вообще и отчёт пуст — ищите причину в кабинете. Если отчёт пришёл и в нём есть сообщения — причина уже в данных объявлений, и разбирать нужно конкретные формулировки.

Если собирать фид вручную не хочется

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

В Advify каталог собирается в интерфейсе, а фид сервис формирует и отдаёт площадке сам — со стабильными Id, абсолютными ссылками на изображения и проверкой разметки описания до отправки. Какой способ выбрать под ваш объём, разобрано в статье про способы автозагрузки.

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

Что такое XML-фид для Авито?
Файл со списком ваших объявлений в виде тегов. Площадка забирает его по ссылке и создаёт или обновляет по нему карточки. Внутри — корневой элемент <Ads> и по одному <Ad> на объявление.
Какие теги обязательны?
Базовый набор: идентификатор, категория, заголовок, описание, цена, адрес и контакты. Остальные поля зависят от категории и берутся из шаблона Авито для неё.
Можно ли сделать фид в Excel?
Авито принимает и табличные форматы, но XML гибче: в нём передаются вложенные структуры вроде прайс-листа услуг и наборов значений. Сравнение форматов — в статье про способы автозагрузки.
Как задать несколько фотографий?
Внутри <Images> перечисляются теги <Image>, у каждого ссылка в атрибуте url. Порядок тегов определяет порядок фото, первое становится главным.
Почему объявления переопубликовались сами?
Скорее всего изменился идентификатор в фиде. Для площадки это новый товар, поэтому старая карточка снимается, а новая публикуется с нуля — с потерей возраста и статистики.
Можно ли запланировать публикацию через фид?
Да, тегами <DateBegin> и <DateEnd> в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС». Так удобно раскладывать большой каталог на несколько дней.
Что будет, если убрать объявление из файла?
Оно снимется с публикации при следующей выгрузке. Поэтому фид всегда должен содержать все актуальные позиции, а не только изменившиеся.
Почему в описании не работает жирный шрифт?
Скорее всего использован устаревший тег <b> — принимается только <strong>. Вторая частая причина: описание вставили в формате Markdown, и вместо выделения в карточке видны звёздочки.
Как сделать отступ в описании?
Никак: пробелы и табуляция схлопываются, а неразрывный пробел в описании недопустим и заменяется обычным. Структуру задают абзацы, переносы строк и списки.
Фид валидный, но объявления не появились. Почему?
Чаще всего в кабинете включён ручной режим загрузки — при нём файл по ссылке не обрабатывается, либо не задано расписание выгрузки. Реже дело в тарифе без автозагрузки или в неверных ключах доступа. Проверять нужно в этом порядке: способ загрузки, расписание, тариф, ключи.
Как часто Авито забирает фид?
По расписанию, которое задаётся при подключении автозагрузки в кабинете. Изменения в файле попадают в объявления не мгновенно, а к следующей выгрузке.

Новые публикации

Комментарии

Публикуются после модерации

Пока нет комментариев

Будьте первым — задайте вопрос или поделитесь опытом. Комментарий появится здесь после модерации.

Ctrl+Enter — отправить

Интерфейс сервиса Advify для автоматизации объявлений на Авито
Революционный интрумент для Автозагрузки Авито
  • Без таблиц
  • Автогенерация с ИИ
  • Самые выгодные тарифы
Тест сервиса Advify бесплатно