¿Cómo obligar a la URL canónica a usar http?

10

En nuestra página usamos el módulo Metatag para mostrar una metaetiqueta canónica. En la configuración usamos el [current-page:url:absolute]token. Esto funciona bien, pero el problema es que si se accede a la página mediante HTTP o HTTPS, este protocolo se usa en la URL canónica.

Para fines de SEO, queremos que la URL canónica sea la misma y usemos HTTP para ambos protocolos.

¿Cómo podemos lograr esto?

saltador
fuente
2
En lugar de hacerlo en Drupal, simplemente forzaría todo el tráfico a HTTPS de forma predeterminada a través de la .htaccessconfiguración de Apache. Problema resuelto.
leymannx

Respuestas:

8

Drupal 7

Puede implementar hook_html_head_alter()para cambiar las etiquetas principales; lo siguiente no ha sido probado pero debería ser el truco:

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
fuente
2

Con el módulo metatag puede usar el token [current-page: url: relative] en lugar del token [current-page: url: absolute].

para que su etiqueta canónica se convierta en algo como: http: //www.mywebsite [current-page: url: relative]

rvb
fuente
0

Drupal 8

Para los nodos, debe usar hook_ENTITY_TYPE_view_alterya que ese es el lugar desde donde se agregaron inicialmente NodeViewController::view().

Y permítanme señalar que probablemente estén mejor simplemente redirigiendo todo su tráfico entrante a SSL de forma predeterminada: ¿Cómo hacer que todo el sitio sea 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;
      }
    }
  };
}

Me acabo de enterar de que, al final, encontraremos todas las etiquetas de cabecera hook_preprocess_htmlen la $variables['page']['#attached']matriz para modificar.

leymannx
fuente
-2

Llámame loco y corrígeme si me equivoco, pero ¿no puedes simplemente codificar la URL con el HTTP?

Estoy seguro de que me falta algo, pero si coloca la URL completa en lugar de usar el token, terminará con esa URL en particular como canónica para cada variación de la página que crea Drupal.

La advertencia es que crea una pesadilla de actualización, ya que debe recordar cambiar el canónico si el alias de la página cambia alguna vez.

Miguel
fuente
A veces, como cuando usa el Acceso al dominio, algunos artículos solo están disponibles en dominios particulares, y la URL de codificación dura crearía enlaces muertos.
Mołot