Comment forcer l'URL canonique à utiliser http?

10

Sur notre page, nous utilisons le module Metatag pour afficher une balise META canonique. Dans la configuration, nous utilisons le [current-page:url:absolute]jeton. Cela fonctionne bien, mais le problème est que, que la page soit accessible par HTTP ou HTTPS, ce protocole est utilisé dans l'URL canonique.

À des fins de référencement, nous voulons que l'URL canonique soit la même et utilisons HTTP pour les deux protocoles.

Comment pouvons-nous y parvenir?

sauteur
la source
2
Au lieu de le faire dans Drupal, je forcerais simplement tout le trafic vers HTTPS par défaut via .htaccessou config Apache. Problème résolu.
leymannx

Réponses:

8

Drupal 7

Vous pouvez implémenter hook_html_head_alter()pour changer les balises de tête; ce qui suit n'est pas testé mais devrait faire l'affaire:

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
la source
2

Avec le module de métabalises, vous pouvez utiliser le jeton [current-page: url: relative] au lieu du jeton [current-page: url: absolue].

de sorte que votre balise canonique deviendrait quelque chose comme: http: //www.mywebsite [current-page: url: relative]

RVB
la source
0

Drupal 8

Pour les nœuds, vous devez utiliser hook_ENTITY_TYPE_view_altercar c'est l'endroit où ils ont été ajoutés initialement NodeViewController::view().

Et permettez-moi de noter que vous êtes probablement mieux loti en redirigeant simplement tout votre trafic entrant vers SSL par défaut: comment rendre simplement l'ensemble du site 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;
      }
    }
  };
}

Je viens de découvrir qu'à la fin, nous trouverons toutes les balises head hook_preprocess_htmldans le $variables['page']['#attached']tableau à modifier.

leymannx
la source
-2

Appelez-moi fou et corrigez-moi si je me trompe, mais ne pouvez-vous pas coder en dur l'URL avec le HTTP?

Je suis sûr qu'il manque quelque chose, mais si vous déposez l'URL complète au lieu d'utiliser le jeton, vous vous retrouverez avec cette URL particulière comme canonique pour chaque variation de la page créée par Drupal.

La mise en garde est que cela crée un cauchemar de mise à jour car vous devez vous rappeler de changer le canonique si l'alias de la page change un jour.

Mike
la source
Parfois, comme lorsque vous utilisez l'accès au domaine, certains articles ne sont disponibles que sur des domaines particuliers, et l'URL de codage en dur créerait des liens morts.
Mołot