Como forçar o URL canônico a usar http?

10

Em nossa página, usamos o módulo Metatag para mostrar uma metatag canônica. Na configuração, usamos o [current-page:url:absolute]token. Isso funciona bem, mas o problema é que, se a página é acessada por HTTP ou HTTPS, esse protocolo é usado na URL canônica.

Para fins de SEO, queremos que o URL canônico seja o mesmo e use HTTP para ambos os protocolos.

Como podemos conseguir isso?

saltador
fonte
2
Em vez de fazer isso no Drupal, eu simplesmente forçaria todo o tráfego para HTTPS por padrão via .htaccessou configuração do Apache. Problema resolvido.
Leymannx

Respostas:

8

Drupal 7

Você pode implementar hook_html_head_alter()para alterar tags de cabeçalho; o seguinte não foi testado, mas deve fazer o truque:

function MYMODULE_html_head_alter(&$head_elements) {
  foreach ($head_elements as $key => &$tag) {
    if (strpos($key, 'drupal_add_html_head_link:canonical:') === 0) {
      if (strpos('https://', $tag['#attributes']['href']) === 0) {
        $tag['#attributes']['href'] = str_replace('https://', 'http://', $tag['#attributes']['href']);
      }
    }
  }
}
Clive
fonte
2

Com o módulo metatag, você pode usar o token [página atual: url: parente] em vez do token [página atual: url: absoluto].

para que sua tag canônica se torne algo como: http: //www.mywebsite [página atual: url: relativa]

rvb
fonte
0

Drupal 8

Para nós, você precisa usar, hook_ENTITY_TYPE_view_alterpois é o local de onde eles foram adicionados inicialmente NodeViewController::view().

E deixe-me observar que você provavelmente está melhor redirecionando todo o tráfego de entrada para SSL por padrão: como simplesmente tornar o site inteiro HTTPS?

/**
 * Implements hook_ENTITY_TYPE_view_alter().
 */
function MYMODULE_node_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  if (isset($build['#attached']['html_head_link'])) {
    foreach ($build['#attached']['html_head_link'] as $key => $head) {
      if ((isset($head[0]['rel']) ? $head[0]['rel'] : FALSE) == 'canonical') {

        $url = \Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])
          ->toString();

        $url = str_replace('https://', 'http://', $url);

        $build['#attached']['html_head_link'][$key][0]['href'] = $url;
      }
    }
  };
}

Acabei de descobrir que, no final, encontraremos todas as tags de cabeçalho hook_preprocess_htmlna $variables['page']['#attached']matriz a serem alteradas.

leymannx
fonte
-2

Me chame de maluca e me corrija se eu estiver errado, mas você não pode simplesmente codificar a URL com o HTTP?

Tenho certeza de que falta algo, mas se você soltar o URL completo em vez de usar o token, você terminará com esse URL específico como o canônico para todas as variações da página que o Drupal criar.

A ressalva é que ele cria um pesadelo de atualização, pois você deve se lembrar de alterar o canônico se o alias da página mudar.

Mike
fonte
Às vezes, como quando você usa o Acesso ao domínio, alguns artigos estão disponíveis apenas em domínios específicos e o URL codificado criava links mortos.
Mołot