YML-выгрузка: исправляем ошибку возле version

Выгрузка для Яндекса открывается с ошибкой Parse error: unexpected identifier "version". В теме октября 2025 года ошибка была в сгенерированном yandex_export.php на строке 8. По одному сообщению нельзя назвать точную причину чужого сайта, но сам текст ошибки позволяет проверить один узкий и хорошо известный случай.

Если ошибка указывает на version в строке XML-декларации <?xml version="1.0"?> внутри PHP-шаблона, при включённых коротких PHP-тегах он пытается разобрать XML как PHP. Решение — выводить XML-декларацию из PHP, а не начинать файл с короткой последовательности <?.

Когда этот рецепт подходит

Откройте свою копию шаблона выгрузки и посмотрите первые строки. Рецепт применим только при двух признаках: ошибка указывает на version, а в этой строке есть <?xml. Если строка другая или ошибка глубже в файле, остановитесь: это уже другой синтаксис.

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

Безопасный вывод XML-декларации

В PHP-файле используйте обычный открывающий тег <?php и выведите строку явно:

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<yml_catalog date="2026-10-04">
    <shop></shop>
</yml_catalog>

Дата выше приведена только как пример разметки. В настоящей выгрузке не подставляйте её вручную, если дата формируется программой. Важна только первая строка: декларация появляется в ответе, но PHP не пытается выполнить слово xml как код.

Почему так происходит

PHP официально рекомендует обычные теги <?php ?> и короткий echo-тег <?= ?>. Обычный короткий тег <? зависит от настройки short_open_tag. XML-декларация начинается именно с этих двух символов, поэтому сочетание непереносимо между серверами.

Не лечите ошибку глобальным включением или выключением short_open_tag на боевом сервере. Такая настройка может изменить поведение старого кода. Исправьте один собственный шаблон и оставьте платформенные настройки без эксперимента.

Как проверить без настоящего Яндекса

  1. Сохраните копию своего шаблона и измените его на тестовой установке.
  2. Сгенерируйте один тестовый файл выгрузки.
  3. Убедитесь, что в начале файла есть ровно <?xml version="1.0" encoding="UTF-8"?>.
  4. Прогоните файл XML-парсером или валидатором принимающей системы.
  5. Повторите генерацию: исправление не должно исчезнуть.

Успешный XML-разбор подтверждает синтаксис XML. Он не проверяет обязательные поля YML и успешную загрузку в кабинет Яндекса. Второй шаг — отправить тестовую выгрузку туда отдельно и посмотреть его сообщение.

Статья подготовлена 4 октября 2026 года. Форумный симптом: тема 163682; причина конкретного файла там не подтверждена. Условное решение воспроизведено на собственном PHP/XML-файле при коротких тегах: это подтверждают руководство PHP по тегам, описание аналогичной ошибки и контракт XML-парсера. Это не диагноз выгрузки из темы.