Что такое XML сайт
XML сайт это сайт страницы которого являются простыми XML файлами с MIME типом "text/xml". Они содержат только уникальные данные для этой страницы.
В таком XML файле задаётся ссылка на XSLT шаблон который преобразует XML в HTML или в XHTML в браузере пользователя.
Проблема
Для классических html веб страниц поисковики в качестве заголовка отображают содержимое тега title. В описании отображается кусочки текста с найденными ключевыми словами или содержимое тега meta description.
Поисковики обычно не исполняют скрипты на страницах которые индексируют и соответственно не видят конечный вариант страницы после их исполнения. Соответственно они не видят теги title и meta которые вставляются XSLT шаблоном. Они индексируют текст который есть в XML документе как есть.
Решение
Наша задача правильно добавить теги title и meta в XML чтобы браузер, поисковик и меседжер в котором отправляется ссылка на страницу их понимали.
Таким же образом можно будет добавить и другие HTML теги для поисковиков, меседжеров и даже браузера если он вдруг не исполнит XSLT шаблон.
Как страница отображается без тегов
Например у нас такой XML:
<запись> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст> </запись>
Как он отображается в поиске без title и meta тегов:
- XML показывается в одну строку (Гугл)
Заголовок:<запись><заголовок>Текст заголовка</заголовок><текст>...
Описание:<запись><заголовок>Текст заголовка</заголовок><текст>Текст записи</текст></запись> - Сокращённый вариант (duckduckgo.com)
Заголовок:example.com
Описание:запись>заголовок>Текст заголовка... - Только содержимое тегов в загаловке (startpage.com)
Заголовок:Текст заголовка Текст записи - Страница не отображается в поиске (Яндекс)
Я запускал несколько раз переиндексацию страницы но яндексу упорно не нравился mime тип страницы. Потом когда я начал писать эту статью они мне прислали увидомление что добавили в поиск. Но сегодня страница снова исчезла из поиска.
Вставляем теги
Для того чтобы вставить теги title и meta в xml и при этом браузер и поисковик понимали что это html теги им надо задать пространство имён "http://www.w3.org/1999/xhtml".
Варианты вставки:
-
Задать префикс для html тегов.
<!-- родительском элементе объявляем префикс 'xh' для xhtml элементов --> <запись xmlns:xh="http://www.w3.org/1999/xhtml"> <!-- далее используем этот префикс перед именем элемента --> <xh:title>Текст заголовка для страницы поиска и меседжеров</xh:title> <xh:meta name ="description" content="Часть текста записи для страницы поиска и меседжеров"/> <!-- у элементов без префикса пространство имён остаётся пустым --> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст> </запись>Этот вариант самый краткий но выяснилось что Гугл его не понимает.
-
Обернуть в элемент с заданным пространством имён поумолчанию.
<запись> <!-- в теге head определяем пространство имён поумолчанию --> <head xmlns="http://www.w3.org/1999/xhtml"> <!-- все дочерние элементы наследуют это пространство имён --> <title>Текст заголовка</title> <meta name="description" content="Часть текста записи для страницы поиска и меседжеров"/> </head> <!-- элементы вне тега head остаются с пустым пространством имён --> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст> </запись>Тут пространство имён поумолчанию задаётся в родительском элементе и распространяется на дочерние.
Гугл понял такой вариант и иcпользовал текст из
titleв качестве заголовка и текст изmeta descriptionв качестве описания страницы.С этим вариантом возникает проблема на web.archive.org. Архив в данном виде воспринимает страницу как html и пихает в неё свои теги "поправляя" те теги которых не знает. В результате документ перестаёт быть правильным XML и не отображается.
Пример работы web.archive.org над этим вариантом.
<запись> <head xmlns="http://www.w3.org/1999/xhtml"><script ...</script> <title>Текст заголовка</title> <meta name="description" content="Часть текста записи для страницы поиска и меседжеров"/> </head> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст> </запись> -
Задать пространство имён поумолчанию каждому элементу индивидуально.
<запись> <!-- задаём пространство имён каждому элементу индивидуально --> <title xmlns="http://www.w3.org/1999/xhtml">Текст заголовка</title> <meta xmlns="http://www.w3.org/1999/xhtml" name="description" content="Часть текста записи для страницы поиска и меседжеров"/> <!-- остальные элементы остаются с пустым пространством имён --> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст> </запись>Данный способ хорош когда нам нужен только один элемент из этого пространства имён и мы можем указать его пространство имён прям в нём.
Этот вариант я только поставил на тест так что результат отображения в Гугле не известен.
Результат
После правильной вставки тегов title и meta в результатах поиска после переиндексации страницы она появляется уже с заданным заголовком и описанием. Также после отправки ссылки на сайт в сообщении подгружается её заголовок и описание.
ссылка на оригинал статьи https://habr.com/ru/post/510318/
Добавить комментарий