Webmaster Notes

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

06 ноября 2016, 20:53

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

25 марта 2014 в 11:29 Многие интернет-магазины попадают в Яндекс.Маркет, не все там остаются надолго. Одно из условий присутствия в ЯМ-е – наличие корректного прайса в специальном формате YML. Проверка такого прайса на ошибки и устранение таковых – целая история. Пока он не будет сформирован по всем правилам – вход в сие царство демпинга заказан. А при доведении документа до ума можно пережить немало незабываемых эмоций. Данная статья – попытка обобщить те ошибки, с которыми сталкиваются программисты, впервые создающие инструменты (будь то автономный скрипт или плагин для CMS) для генерации YML-файла. Тем, кто с этим чудным форматом имел дело раньше, статья уже будет не столь интересна, ибо всё шишки набиты. Впрочем, вдруг и ветераны борьбы за своё место под солнцем Яндекса узнают что-то новое для себя. А то и поделятся собственным фронтовым опытом. Классификация ошибок Неактуальные ошибки Не та кодировка. Первое обо что спотыкались в старые добрые времена. Большинство движков работают на UTF-8, а ЯМ когда-то требовал только любимую кодировку Windows. Поговаривают, что капризного Яшу можно было объегорить – сделать вид, что согласны на богомерзкую cp1251 при утверждении магазина, после того как «таможня даёт добро» – преспокойно заменить прайс на расово верный Юникод. Что интересно – CSV (как нежелательную альтернативу YML) Яндекс.Маркет принимает исключительно в UTF-8 :) Все остальные грабли лежат всё там же. Ошибки спецификации XML YML – это частный случай XML. А значит, должен соответствовать его основным правилам. Не забываем об обязательном наличии и , следим за правильной вложенностью тегов, заменяем «великолепную пятёрку» (", &, <, >, ') на их мнемонические эквиваленты. Причём, в самих мнемониках символ & на его мнемонику & менять не нужно, а то какая-то бесконечная рекурсия может получиться. Прежде чем применять к тексту (для элемента , например) функцию htmlspecialchars, следует учесть, что там уже могут мнемоники изначально присутствовать ;) Критичные ошибки YML Теперь Ваш прайс – кошерный XML, но Яндекс наотрез отказывается его принимать. Разбираемся дальше. Ошибки в использовании элементов. Перечитываем 3 раза (а ещё лучше — 5) внимательно официальную документацию, не забываем про глобальные теги (, ), следим за правильным написанием названий, не занимаемся отсебятиной в виде придумывания несуществующих в спецификации тегов, всю иерархию расставляем по yml-скому фен-шую, указываем правильно параметры и т.д. Отсутствие обязательных элементов. Самые частые ошибки новичков и не очень новичков. Особенно часто такое всплывает при формировании offer-ов. Необязательный тег для одного вида описаний может оказаться обязательным для другого. К примеру, . На такое можно напороться, если раньше к продукции применялось упрощённое описание, а потом вдруг решили переделать на vendor.model. Не каноничный порядок элементов. Очень подлая ошибка, прям-таки удар под дых для тех, кто с ней сталкивается впервые. Ситуация, когда Яндекс невозмутимо настаивает, что в строке такой-то позиция такая-то что-то не так, а в указанном месте ничего подозрительного и в упор не видно (причём, гугление форумов и медитация на офдокументацию эффекта не даёт) – способна довести любого до белого каления. А ларчик просто открывается – элементы должны идти именно в том порядке, в котором они перечислены в спецификации. Вот в упрощённом описании сначала название товара, а потом производитель. А в vendor.model сначала производитель, а потом название товара. И ни в коем разе не наоборот. Повторы продукции по ID. Что умиляет, ошибка эта Яндексом выдаётся сразу двумя разными способами (чтобы никто не запутался) – сначала перечисляются элементы с некорректными идентификаторами, а потом идёт список предложений-дубликатов. С перепугу можно решить, что ошибок в 2 раза больше, чем на самом деле. И если с дубликатами всё понятно, то непосвящённым ещё предстоит догадаться чем именно некорректны некорректные идентификаторы. Некритичные ошибки YML Яндекс почти ублажен. Поработаем ещё немного. Некорректные URL. Часто это ссылки, например, содержащие пробельные символы или русские буквы. Вообще, во многих движках в таблицах БД обычно есть поля, хранящие прямые линки на страницы продукции. Что характерно, почти во всех CMS среди этих ссылок очень много мусора и поэтому обычно приходится генерировать самому. Цена равна 0. Здесь программисту нужно посовещаться с контент-менеджером. Или фильтровать нулевые цены, но тогда о товарах, где забыли указать стоимость, вспомнят нескоро. Или не фильтровать и пускай в будущем контент-менеджер с претензиями Яндекса сам разбирается. Неверные ссылки на картинки. Ну, тут примерно та же история, что и с неправильными URL. Прописанных в базе данных картинок часто не существует в природе. Прежде чем оформлять очередной – проверяйте наличие файла. Если картинка в наличии, но в названии есть злополучные пробелы – кодируйте ссылки в RFC3986 (функция rawurlencode Вам в помощь). Прочие ошибки ОК, все огрехи тотально устранены и скормленный Яндексу yml-прайс не выплёвывается обратно. Погодите расслабляться, через пару дней вполне может прийти «письмо счастья» от менеджеров ЯМ-а, в котором уведомляется, что: Товарный ряд сплагиачен из другого магазина. Особо тяжкое преступление, караемое по всей строгости закона. В вашем прайсе мы упорно искали и таки нашли дубликаты! И кстати, некоторые ссылки ведут не туда. Какой идиот создавал эту категоризацию? В качестве фото продукции используются заглушки. Одни и те же фото у разных товаров. Ну и что с того, что на официальном сайте производителя то же самое? А некоторые картинки вообще не с Вашего сайта. В мутных водах элементов плавает «рыба». В магазине 100% предоплата, но почему об этом ни гу-гу в теле необязательного элемента ? Ах, у Вас из 500 товаров есть всего один «под заказ»? А почему у него aviable=’true’, а не ‘false’? У вас, уважаемые, доставка 3 дня, а по нашим понятиям товар считается «доступным» если доставляется в течении 2-х. … и всякое-такое прочее. А посему Ваша лавочка пока отстранена от присутствия в торговой вселенной Яндекс.Маркета на срок от недели до навсегда. По большому счёту, подобные ошибки вне компетенции кодеров. За них отвечают другие специально обученные люди – контент-менеджеры, SEO-шники, маркетологи или кого там ещё нагрузили следить за содержимым сайта. Впрочем, программисты иногда могут помочь и здесь. Например, фильтруя картинки-заглушки (определяя их по стандартным названиям) или не пропуская описания продукции, почему-то начинающиеся со слов «Lorem ipsum» и «bla bla bla». Как и где проверять ошибки Отлавливать все эти многочисленные ляпы проще всего в таком порядке. Ошибки XML. Хозяюшке на заметку – дублируйте yml-файлы с расширением xml, по крайней мере в период тестирования (да и потом может пригодиться). В браузерах и текстовых редакторах yml-документы открываются как унылые текстовики, что делает их неудобными для просмотра и анализа. В дебрях XML ориентироваться намного проще: там всегда весёленькая подсветка тегов + элементы можно «схлопнуть» в соответствии с их иерархической структурой + браузер услужливо подскажет где несоответствия спецификации. В общем, отследить ошибки YML проще, открыв его как XML. Проверка в Яндекс-Маркете. Ну, и последнее слово – за Яндексом. Зарегистрировав магазин, проверяйте файл в ихнем валидаторе и устраняйте выдаваемые ошибки до победного конца. Ссылки Яндекс: Официальная спецификация YML Требования к методу передачи данных Валидатор Вопросы и ответы Требования к рекламным материалам Хабрахабр: Яндекс.Маркет – to be or not? Размещение товаров на Яндекс.Маркете. Типичные проблемы и их решение Ночное ворчание о Яндексе, Маркете и интерфейсах вообще
Комментарии к этой заметке больше не принимаются.
Все заметки категории «Бездомные заметки»