Корректный YML для Яндекс.Маркета. Взгляд программиста

от автора


Многие интернет-магазины попадают в Яндекс.Маркет, не все там остаются надолго. Одно из условий присутствия в ЯМ-е – наличие корректного прайса в специальном формате YML.

Проверка такого прайса на ошибки и устранение таковых – целая история. Пока он не будет сформирован по всем правилам – магазин в сей демпинговый рай не примут. А при доведении документа до ума можно пережить немало незабываемых эмоций.

Данная статья – попытка обобщить те ошибки, с которыми сталкиваются программисты, впервые создающие инструменты (будь то автономный скрипт или плагин для CMS) для генерации YML-файла. Тем, кто с этим чудным форматом имел дело раньше, статья уже будет не столь интересна, ибо всё шишки набиты. Впрочем, вдруг и ветераны борьбы за своё место под солнцем Яндекса узнают что-то новое для себя. А то и поделятся собственным фронтовым опытом.

Классификация ошибок

  1. Неактуальные ошибки

    • Не та кодировка. Первое обо что спотыкались в старые добрые времена. Большинство движков работают на UTF-8, а ЯМ когда-то требовал только любимую кодировку Windows. Поговаривают, что капризного Яшу можно было объегорить – сделать вид, что согласны на богомерзкую cp1251 при утверждении магазина, после того как «таможня даёт добро» – преспокойно заменить прайс на расово верный Юникод. Что интересно – CSV (как нежелательную альтернативу YML) Яндекс.Маркет принимает исключительно в UTF-8 🙂

    Все остальные грабли лежат всё там же.

  2. Ошибки спецификации XML


    YML – это частный случай XML. А значит, должен соответствовать его основным правилам. Не забываем об обязательном наличии <?xml ?> и <!DOCTYPE>, следим за правильной вложенностью тегов, заменяем «великолепную пятёрку» (", &, <, &gt, ') на их мнемонические эквиваленты.

    Причём, в самих мнемониках символ & на его мнемонику &amp; менять не нужно, а то какая-то бесконечная рекурсия может получиться. Прежде чем применять к тексту (для элемента <description>, например) функцию htmlspecialchars, следует учесть, что там уже могут мнемоники изначально присутствовать 😉

  3. Критичные ошибки YML

    Теперь Ваш прайс – кошерный XML, но Яндекс наотрез отказывается его принимать. Разбираемся дальше.

    • Ошибки в использовании элементов. Перечитываем 3 раза (а ещё лучше — 5) внимательно официальную спецификацию, не забываем про глобальные теги (<yml_catalog>, <shop>), следим за правильным написанием названий, всю иерархию расставляем по yml-скому фен-шую, указываем правильно параметры и т.д.

    • Отсутствие обязательных элементов. Самые частые ошибки новичков и не очень новичков. Особенно часто такое всплывает при формировании offer-ов. Обязательный тег для одного вида описаний может быть необязательным для другого. К примеру, <vendor>. На такое можно напороться, если раньше к продукции применялось упрощённое описание, а потом вдруг решили переделать на vendor.model.
    • Не каноничный порядок элементов. Очень подлая ошибка, прям-таки удар под дых для тех, кто с ней сталкивается впервые. Ситуация, когда Яндекс невозмутимо настаивает, что в строке такой-то позиция такая-то что-то не так, а в указанном месте ничего подозрительного и в упор не видно (причём, гугление форумов и медитация на офдокументацию эффекта не даёт) – способна довести любого до белого каления.
      А ларчик просто открывается – элементы должны идти именно в том порядке, в котором они перечислены в спецификации. Вот в упрощённом описании сначала название товара, а потом производитель. А в vendor.model сначала производитель, а потом название товара. И ни в коем разе не наоборот.
    • Повторы продукции по ID. Что умиляет, ошибка эта Яндексом выдаётся сразу двумя разными способами (чтобы никто не запутался) – сначала перечисляются элементы с некорректными идентификаторами, а потом идёт список предложений-дубликатов.
      С перепугу можно решить, что ошибок в 2 раза больше, чем на самом деле. И если с дубликатами всё понятно, то непосвящённым ещё предстоит догадаться чем именно некорректны некорректные идентификаторы.
  4. Некритичные ошибки YML


    Яндекс почти ублажен. Поработаем ещё немного.

    • Некорректные URL. Часто это ссылки, например, содержащие пробельные символы. Вообще, во многих движках в таблицах БД обычно есть поля, хранящие прямые линки на страницы продукции. Что характерно, почти во всех CMS среди этих ссылок очень много мусора и поэтому обычно приходится генерировать самому.
    • Цена равна 0. Здесь программисту нужно посовещаться с контент-менеджером. Или фильтровать нулевые цены, но тогда о товарах, где забыли указать стоимость, вспомнят нескоро. Или не фильтровать и пускай в будущем контент-менеджер с претензиями Яндекса сам разбирается.
    • Неверные ссылки на картинки. Ну, тут примерно та же история, что и с неправильными URL. Прописанных в базе данных картинок часто не существует в природе. Прежде чем оформлять очередной <picture> – проверяйте наличие файла. Если картинка в наличии, но в названии есть злополучные пробелы – кодируйте ссылки в RFC3986 (функция rawurlencode Вам в помощь).

  5. Ошибки, не по вине программистов

    ОК, все огрехи тотально устранены и скормленный Яндексу yml-прайс не выплёвывается обратно. Погодите расслабляться, через пару дней вполне может прийти «письмо счастья» от менеджеров ЯМ-а, в котором уведомляется, что:

    • Товарный ряд сплагиачен из другого магазина. Особо тяжкое преступление, караемое по всей строгости закона.
    • В вашем прайсе мы упорно искали и таки нашли дубликаты!
    • И кстати, некоторые ссылки ведут не туда.
    • Какой идиот создавал эту категоризацию?
    • В качестве фото продукции используются заглушки.
    • Одни и те же фото у разных товаров. Ну и что с того, что на официальном сайте производителя то же самое?
    • А некоторые картинки вообще не с Вашего сайта.
    • В мутных водах элементов <description> плавает «рыба».
    • В магазине 100% предоплата, но почему об этом ни гу-гу в теле необязательного элемента <sales_notes>?
    • Ах, у Вас из 500 товаров есть всего один «под заказ»? А почему у него aviable=’true’, а не ‘false’?
    • … и всякое-такое прочее.

    А посему Ваша лавочка пока отстранена от присутствия в торговой вселенной Яндекс.Маркета на срок от недели до навсегда.

    По большому счёту, подобные ошибки вне компетенции кодеров. За них отвечают другие специально обученные люди – контент-менеджеры, SEO-шники, маркетологи или кого там ещё нагрузили следить за содержимым сайта. Впрочем, программисты иногда могут помочь и здесь. Например, фильтруя картинки-заглушки (определяя их по стандартным названиям) или не пропуская описания продукции, почему-то начинающиеся со слов «Lorem ipsum» и «bla bla bla».

Как и где проверять ошибки

Отлавливать все эти многочисленные ляпы проще всего в таком порядке.

  • Ошибки XML. Хозяюшке на заметку – дублируйте yml-файлы с расширением xml, по крайней мере в период тестирования (да и потом может пригодиться). В браузерах и текстовых редакторах yml-документы открываются как унылые текстовики, что делает их неудобными для просмотра и анализа. В дебрях XML ориентироваться намного проще: там всегда весёленькая подсветка тегов + элементы можно «схлопнуть» в соответствии с их иерархической структурой + браузер услужливо подскажет где несоответствия спецификации. В общем, отследить ошибки YML проще, открыв его как XML.
  • Первичная проверка общего синтаксиса YML. Сгенерированный файл корректен как XML, но пока ещё не в ипостаси YML. Быстро отловить общие баги можно с помощью Online YAML Parser.
    Плюсы этого сервиса – сообщения об недочётах более понятны и конкретизированы, чем у самого Яндекса. Кроме того, проверяет намного быстрее. Для проверки средствами самого Яндекс.Маркета нужно иметь в системе зарегистрированный интернет-магазин, что для программистов, особенно сторонних, не совсем удобно.
    Ковш дёгтя в тазике мёда состоит в том, что не все ошибки опознаются, например неверный порядок элементов. Кроме того, иногда выдаёт ложные предупреждения, часто сообщает, что в названиях и описаниях товаров есть какие-то загадочные «нежелательные символы» (сам Яндекс ничего такого не видит). Но в целом, для предварительной разведки вполне годный инструмент.
  • Проверка в Яндекс-Маркете. Ну, и последнее слово – за Яндексом. Зарегистрировав магазин, проверяйте файл в ихнем валидаторе и устраняйте выдаваемые ошибки до победного конца.

Ссылки

Яндекс:

Официальная спецификация YML
Требования к методу передачи данных
Вопросы и ответы

Сервисы:

Online YAML Parser

Хабрахабр:

Яндекс.Маркет – to be or not?
Размещение товаров на Яндекс.Маркете. Типичные проблемы и их решение
Ночное ворчание о Яндексе, Маркете и интерфейсах вообще

Опрос

Приходилось ли вам с нуля писать скрипты/плагины для генерации YML?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/216985/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *