Bagaimana cara memaksa URL kanonik menggunakan http?

10

Di halaman kami, kami menggunakan modul Metatag untuk menunjukkan meta tag kanonik. Dalam konfigurasi kita menggunakan [current-page:url:absolute]token. Ini berfungsi dengan baik, tetapi masalahnya adalah, apakah halaman dapat diakses melalui HTTP atau HTTPS, protokol ini digunakan dalam URL kanonik.

Untuk keperluan SEO kami ingin URL kanonik sama dan menggunakan HTTP untuk kedua protokol.

Bagaimana kita bisa mencapai hal ini?

peloncat
sumber
2
Alih-alih melakukan itu di Drupal saya hanya akan memaksa semua lalu lintas ke HTTPS secara default melalui .htaccessatau konfigurasi Apache. Masalah terpecahkan.
leymannx

Jawaban:

8

Drupal 7

Anda dapat menerapkan hook_html_head_alter()untuk mengubah tag kepala; berikut ini belum diuji tetapi harus melakukan trik:

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

Dengan modul metatag Anda dapat menggunakan token [current-page: url: relative] alih-alih token [current-page: url: absolute].

jadi tag kanonik Anda akan menjadi seperti: http: //www.mywebsite [halaman-saat ini: url: relatif]

rvb
sumber
0

Drupal 8

Untuk node yang harus Anda gunakan hook_ENTITY_TYPE_view_alterkarena itulah tempat mereka ditambahkan NodeViewController::view().

Dan biarkan saya perhatikan bahwa Anda mungkin lebih baik dengan hanya mengarahkan semua lalu lintas masuk ke SSL secara default: Bagaimana cara membuat seluruh situs 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;
      }
    }
  };
}

Saya baru tahu, bahwa pada akhirnya kita akan menemukan semua tag kepala di hook_preprocess_htmldalam $variables['page']['#attached']array yang akan diubah.

leymannx
sumber
-2

Panggil saya gila dan tolong perbaiki saya jika saya salah, tetapi tidak bisakah Anda hanya membuat kode URL dengan HTTP?

Saya yakin ada sesuatu yang saya lewatkan, tetapi jika Anda memasukkan URL lengkap alih-alih menggunakan token, Anda akan berakhir dengan URL tertentu sebagai kanonik untuk setiap variasi halaman yang dibuat Drupal.

Peringatannya adalah ia menciptakan pembaruan mimpi buruk karena Anda harus ingat untuk mengubah kanonik jika alias halamannya pernah berubah.

Mike
sumber
Kadang-kadang, seperti ketika Anda menggunakan Akses Domain, beberapa artikel hanya tersedia pada domain tertentu, dan URL hard-coding akan membuat tautan mati.
Mołot