ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как отправить turbo страницы в webmaster yandex?

Может я что то не правильно понял.
На вкладке с турбо-страницами написано
Загрузка через API
Для крупных сайтов. Пакетная загрузка. До 10 000 элементов item в каждой задаче, до 10 задач одновременно.

Как это понял я: получаем ссылку на api, генерируем XML с полями item и пушим всем скопом их методом POST по предоставленной ссылке. Я прав, или нет?

Начал процесс по получению ссылки, тут все ок, все сделал.

Выдернул из базы данных 10 документов и сформировал из них XML
function getItemsXML(request) {
    return xml = `<?xml version="1.0" encoding="UTF-8"?><rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"><channel>`,
        Promise.all(request.map(async (document) => {
            xml += `<item turbo="true"><link>${document.url}</link><turbo:content><![CDATA[<header><h1>Фото ${document.tags.slice(0, 3).join(', ')}</h1></header><pubDate>${document.indexAt.toUTCString()}</pubDate><figure><img src="${document.image}"><figcaption>Бесплатное фото ${document.tags.slice(-3).join(', ')}</figcaption></figure>]]></turbo:content></item>`
        })), xml + `</channel></rss>`
}

Такая же структура в обычно rss для турбо-страниц

Пытаюсь добавить эти элементы по апи
function pushYandexTurboItems(request) {
    return options.uri = request.address, options.headers['Content-type'] = 'application/rss+xml', options.FormData = request.rss,
        http.post(options).then()
}

Вываливает ошибка
body:
      { error_message: 'Expected valid xml, found: "..."',
        error_code: 'ENTITY_VALIDATION_ERROR' }


Расшифровка
ENTITY_VALIDATION_ERROR — тело запроса не прошло валидацию.


Что не так?
Пробовал массив элементов передать
return Promise.all(request.map(async (document) => {
        return `<item turbo="true"><link>${document.url}</link><turbo:content><![CDATA[<header><h1>Фото ${document.tags.slice(0, 3).join(', ')}</h1></header><pubDate>${document.indexAt.toUTCString()}</pubDate><figure><img src="${document.image}"><figcaption>Бесплатное фото ${document.tags.slice(-3).join(', ')}</figcaption></figure>]]></turbo:content></item>`
    }))


Та же самая ошибка.

Думаю может я вообще не понял предназначение данного апи?
  • Вопрос задан
  • 1421 просмотр
Пригласить эксперта
Ответы на вопрос 3
@developerbitrix
Тоже столкнулся с такой проблемой, дело было в кодировке. Rss должен быть в utf-8.
Ответ написан
Комментировать
@maxxi165
Фид должен начинаться с <rss
пример из доки
Ответ написан
Комментировать
@fomiash
Класс для отправки turbopages from YandexAPI
Стоит добавить, что турбостраницы Яндекса очень капризны, при превышении лимитов текста, разбиения на блоки , количества картинок и тд, могут быть проблемы с загрузкой фида, неполной его загрузкой, при этом конкретную ошибку возвращает не часто. Есть опыт подключения к турбо-страницам десятков тысяч страниц сайта, вылилось это в написание функционала, который формирует из статей нормальный, валидный текст (длинные предложения разбиваются, с этим было много мороки), встроенные картинки проверяются на отклик перед отправкой (да, и это тоже важно). Стоит также обратить внимание на устаревание ссылки на API, которую нужно получать примерно раз в час и невозможность работать в тестовом режиме нормально. Ньюансов очень много, но по преодолению их можно увидеть довольную улыбку сеошника, что дорогого стоит)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы