Атрибут hreflang для разных регионов

Главные вкладки

Аватар пользователя kartvladek kartvladek 13 января 2017 в 12:40

Всем доброго здоровья. Возникла ситуация, когда для мультиязычного сайта потребовалось создать hreflang с указанием региона. К примеру - язык Русский, код - ru, регион - ru-ru, hreflang = ru-ru
Вот рекомендации https://support.google.com/webmasters/answer/189077?hl=ru
Как быстро выяснилось, готовых решений для таких потребностей нет, чему я безмерно удивился - ситуация востребованная, а ничего не нашел ни в сообществе, ни в дебрях интернетов.
Изучение существующих модулей таково:

  1. Alternate hreflang
  2. - создает правильные ссылки на языковые версии, не имеет механизма присвоения региональных атрибутов

  3. Internationalization
  4. - создает сокращенные ссылки на языковые версии, не имеет механизма присвоения региональных атрибутов

  5. https://www.drupal.org/project/metatag
  6. - при всем уважении к Metatag оказался самым не удобным, ссылки на языковые версии также не валидные, механизма присвоения региональных атрибутов также нет.

Атрибут hreflang основывается на коде языка. Как вариант - создать искусственный язык, к примеру, ru-ru как русский для России, тогда и атрибут будет ru-ru, но это - ужасный способ, языка с кодом ru-ru не существует. Поэтому - посмотрим, что можно изменить в коде для 2-х первых модулей. Примеры - во вложениях. Да, это не идеальный вариант, но полностью меня устроило. Во первых, языки создаются с правильными языковыми кодами, во вторых - к каждому языку можно назначить региональный атрибут какой нам угодно.
Буду рад, если это пригодится сообществу.

Комментарии

Аватар пользователя kartvladek kartvladek 13 января 2017 в 13:15

Ага... не знаю причин - просто загрузил файлы. Тогда приведу куски кода.
Для Altenate Hreflang
$link['query'] += drupal_get_query_parameters();
switch ($langcode){
case "ru":
$langcode = 'ru-ru';
break;
case 'uk':
$langcode = 'ru-ua';
break;
case 'be':
$langcode = 'ru-by';
break;
case 'kk':
$langcode = 'ru-kz';
break;
//пишем дальше...
}
Для i18_hreflang
foreach($translations as $lang => $translation) {
switch ($lang){
case "ru":
$lang = 'ru-ru';
break;
case 'uk':
$lang = 'ru-ua';
break;
case 'be':
$lang = 'ru-by';
break;
case 'kk':
$lang = 'ru-kz';
break;
//пишем дальше...
}
Лично я решил использовать Altenate hreflang

Аватар пользователя kartvladek kartvladek 13 января 2017 в 16:31

К сожалению - это далеко не идеальное решение, как и упоминал ранее. Сейчас это всего-лишь правка в оригинальном коде модулей. Знаю, что это плохо и отвратительно. Решение требовалось мгновенное, если поможете с исправлением - буду только рад.