Localizator. Атрибут hreflang для мультиязычных сайтов



У нас есть мультиязычный сайт, построенный на Fenom и Localizator. Нам нужно прописать атрибут «hreflang» для правильного распознавания локализованной версии страницы поисковиками типа Google и Яндекс.

Используем вариант указания языковых версии в head. Этот вариант подходит для сайтов, у которых языков меньше 10 штук. Если больше, то оптимально будет указать локальные версии в sitemap.xml.

Совместно с @Евгений Webinmd накидали сниппет hreflangs, а потом его еще улучшил @Alex =).

Создаем сниппет hreflangs и вставляем следующий код:

<?php
$output = "";
$default = "ua";
$id = $modx->resource->get('id');
$start = $modx->getOption('site_start');
$protocol = $modx->getOption('server_protocol').'://';

$pdoTools = $modx->getService('pdoFetch');

$resources = $pdoTools->getCollection('localizatorLanguage',['active' => 1], [
    'sortby' => 'id',
    'sortdir' => 'asc',
]);

if($resources) {
     
    foreach($resources as $resource) {

        $key = $resource['key'];
        
        if($id != $start) {
            $url = $resource['http_host'].$modx->makeUrl($id);
        } else {
            $url = $resource['http_host'];
        }
        
        if($key == $default) {
            $output .= "<link rel='alternate' hreflang='x-default' href='{$protocol}{$resource['http_host']}' />";
        } 
        
        $output .= "<link rel='alternate' hreflang='{$key}' href='{$protocol}{$url}'>";
        
    }
}

return $output;

Вызываем в head:

{'!hreflangs' | snippet : []}

Результат

<link rel="alternate" hreflang="ru" href="https://site.com/ru/">
<link rel="alternate" hreflang="uk" href="https://site.com/">
<link rel="alternate" hreflang="en" href="https://site.com/en/">
<link rel="alternate" hreflang="x-default" href="https://site.com/">

Пользуйтесь на здоровье! В документацию информацию добавил.
Иван Бочкарев
22 сентября 2020, 22:28
modx.pro
2
483
+17
Поблагодарить автора Отправить деньги

Комментарии: 2

Николай Савин
24 сентября 2020, 07:02
0
Мне кажется шаблон вывода стоит вынести в отдельный параметр tpl
Нехорошо разметку посреди кода пихать.
    Александр Мельник
    24 сентября 2020, 07:21
    +1
    if($key == $default) {
                $output .= "<link rel='alternate' hreflang='x-default' href='{$protocol}{$resource['http_host']}' />";
            }
    Здесь наверное нужен continue;
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2