Что такое 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://personeltest.ru/away/www.w3.org/1999/xhtml"> <!-- далее используем этот префикс перед именем элемента --> <xh:title>Текст заголовка для страницы поиска и меседжеров</xh:title> <xh:meta name ="description" content="Часть текста записи для страницы поиска и меседжеров"/> <!-- у элементов без префикса пространство имён остаётся пустым --> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст></запись>
Этот вариант самый краткий но выяснилось что Гугл его не понимает.
-
Обернуть в элемент с заданным пространством имён поумолчанию.
<запись> <!-- в теге head определяем пространство имён поумолчанию --> <head xmlns="http://personeltest.ru/away/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://personeltest.ru/away/www.w3.org/1999/xhtml"><script ...</script> <title>Текст заголовка</title> <meta name="description" content="Часть текста записи для страницы поиска и меседжеров"/> </head> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст></запись>
-
Задать пространство имён поумолчанию каждому элементу индивидуально.
<запись> <!-- задаём пространство имён каждому элементу индивидуально --> <title xmlns="http://personeltest.ru/away/www.w3.org/1999/xhtml">Текст заголовка</title> <meta xmlns="http://personeltest.ru/away/www.w3.org/1999/xhtml" name="description" content="Часть текста записи для страницы поиска и меседжеров"/> <!-- остальные элементы остаются с пустым пространством имён --> <заголовок>Текст заголовка</заголовок> <текст>Текст записи</текст></запись>
Данный способ хорош когда нам нужен только один элемент из этого пространства имён и мы можем указать его пространство имён прям в нём.
Этот вариант я только поставил на тест так что результат отображения в Гугле не известен.
Результат
После правильной вставки тегов title
и
meta
в результатах поиска после переиндексации
страницы она появляется уже с заданным заголовком и описанием.
Также после отправки ссылки на сайт в сообщении подгружается её
заголовок и описание.