Come forzare l'URL canonico a utilizzare http?


10

Sulla nostra pagina utilizziamo il modulo Metatag per mostrare un meta tag canonico. Nella configurazione utilizziamo il [current-page:url:absolute]token. Funziona bene, ma il problema è che se si accede alla pagina tramite HTTP o HTTPS questo protocollo viene utilizzato nell'URL canonico.

Ai fini SEO vogliamo che l'URL canonico sia lo stesso e utilizziamo HTTP per entrambi i protocolli.

Come possiamo raggiungere questo risultato?


2
Invece di farlo in Drupal, forzerei semplicemente tutto il traffico su HTTPS per impostazione predefinita tramite .htaccesso Apache config. Problema risolto.
leymannx,

Risposte:


8

Drupal 7

È possibile implementare hook_html_head_alter()per modificare i tag head; quanto segue non è testato ma dovrebbe fare il trucco:

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']);
      }
    }
  }
}

2

Con il modulo metatag è possibile utilizzare il token [current-page: url: relative] invece del token [current-page: url: absolute].

quindi il tuo tag canonico diventerebbe qualcosa di simile a: http: //www.mywebsite [current-page: url: relative]


0

Drupal 8

Per i nodi devi usare in hook_ENTITY_TYPE_view_alterquanto è il luogo da cui sono stati aggiunti inizialmente NodeViewController::view().

E fammi notare che probabilmente stai meglio semplicemente reindirizzando tutto il tuo traffico in entrata su SSL per impostazione predefinita: come rendere semplicemente l'intero sito 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;
      }
    }
  };
}

Ho appena scoperto, che alla fine troveremo tutti i tag head in hook_preprocess_htmlnella $variables['page']['#attached']matrice per essere modificato.


-2

Chiamami pazzo e per favore correggimi se sbaglio, ma non puoi semplicemente codificare l'URL con l'HTTP?

Sono sicuro che manchi qualcosa, ma se trascini l'URL completo invece di usare il token, finirai con quel particolare URL come canonico per ogni variante della pagina creata da Drupal.

L'avvertenza è che crea un incubo di aggiornamento in quanto devi ricordare di cambiare il canonico se l'alias della pagina cambia mai.


A volte, come quando si utilizza l'accesso al dominio, alcuni articoli sono disponibili solo su domini particolari e l'URL codificato crea collegamenti non funzionanti.
Mołot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.