xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как удалить shortlink из <head> страничек

Опубликовано в

Drupal 7 на каждой странице материала выводит shortlink, даже если у ноды есть синоним:

<link rel="shortlink" href="/node/..." />

Избавиться от него можно так:

/**
 * Implements hook_html_head_alter().
 */
function THEMENAME_html_head_alter(&$head_elements) {
  foreach ($head_elements as $key => $element) {
    if (isset($element['#attributes']['rel']) && $element['#attributes']['rel'] == 'shortlink') {
      unset($head_elements[$key]);
    }
  }
}

Код добавляется в template.php. По аналогии можно удалить любой другой элемент из head.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Зачем от него избавляться?
Для экономии объема страницы?

у меня с ним вылезали дубли в поисковиках, хотя ссылок вида node/nid нигде не было. да и вообще неоднозначный тег какой-то, мне он не нравится :)

Только наткнувшись на эту статью понял откуда дубли в поисковиках.
зачем он вообще его втыкает ?

Скажите а для чего нужен этот shortlink ?

короткий url текущей страницы

Оставлю памятку как добавлять в заголовок информацию. Например, у меня есть представление новостей и рсс иконка для нее выводится только на странице этого представления. Для исправления этого недочета (нужен вывод иконки и на главной) я написал такую функцию. Пусть и топорно, но не знал как лучше получить рсс:

function templatename_preprocess_html(&$variables) {
  global $base_url;
  if ($variables['is_front']) {
    $element = array(
      '#tag' => 'link', // The #tag is the html tag - <link />
      '#attributes' => array( // Set up an array of attributes inside the tag
        'href' => $base_url . '/news.xml',
        'rel' => 'alternate',
        'type' => 'application/rss+xml',
        'title' => t('Новости'),
      ),
    );
    drupal_add_html_head($element, 'rssnews');
  }
}

А если shortlink будет выдавать тот же урл, что и canonical? Имею виду, в модуле Meta tags есть настройка где можно прописать [current-page:url], и не редактировать template.php. Как воспримут поисковики?

А как ты сделал абсолютный путь для canonical?

<link rel="canonical" href="http://xandeadx.ru/blog/drupal/411" />

Ведь по дефолту в друпале относительный путь, ну, всмысле от корня сайта:

<link rel="canonical" href="/blog/drupal/411" />

Что-то не могу найти решения. На орге даже issue есть http://drupal.org/node/1104828
На д.ру тоже спрашивают и никто не знает.

Обновление ядра до последней версии не помогло, видать так и не пофиксили.

у меня же шестёрка, каноникал вывожу ручками

Петров Николай, в конфиге basePath какой?

А как избавиться от лишней строки каноникал?

Я как то что-то добавил, чтобы ко всем страницам прибавлялась строка каноникал (каждый документ считался каноническим, т.к. страницы дальше первой в галереи формируемой Media Gallery, не индексировались яндексом по причине не канонической страницы).

В итоге в коде страниц сейчас присутствуют 2 каноникал строчки, первая правильная и вторая от друпала по умолчанию.

Вопрос - как избавиться от второй строчки???

в коде shortlink заменить на canonical

А я наоборот его добавлял.

Global Redirect решает проблему дублей.

Дополнение. Как убрать неправильный каноникал друпала:

	// убиваем каноникал друпала (с путем без домена), но оставляем каноникал модуля Page Title
	if (isset($element['#attributes']['rel']) && $element['#attributes']['rel'] == 'canonical' && isset($element['#attached'])) {
			unset($head_elements[$key]);
	}

этот кусок кода нужно вставить в форыч который написан в данной статье

to PVasili:
> в конфиге basePath какой?

settings.php:
$base_url = 'http://bestmaps.ru';

- это не помогает, с этим параметром каноникал все равно без домена:
/place/ostrov-palma-dzhumeira

а должен быть такой
http://bestmaps.ru/place/ostrov-palma-dzhumeira

А я сейчас поставил модуль Meta Tag (Drupal 7), не настраивал его, и у меня canonical полностью с протоколом доменом и алиасом.

И shortlink тоже полностью с протоколом, доменом и node/nid

Не знаю, может и до установки Meta Tag так было, я не заглядывал в head. Только обновляю сайт до D7.

В Global Meta Tag стоит
Canonical URL: [current-page:url:absolute]

Указанный код для удаления shortlink сработал на отлично, спасибо.

А для 8.х как можно это сделать?

/**
 * Implement HOOK_entity_view_alterr()
 */
function petslady_custom_entity_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity) {
  if ($build['#view_mode'] === 'full' && $entity Instanceof \Drupal\node\NodeInterface) {
    if (!isset($build['#attached']['html_head_link'])) return;
    $unset_html_head_link = [
      '___name of links___',
    ];
    foreach ($build['#attached']['html_head_link'] as $key => $value) {
      if (isset($value[0]['rel']) && in_array($value[0]['rel'], $unset_html_head_link)) unset($build['#attached']['html_head_link'][$key]);
    }
  }
}

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании