OKADA LABO

PCサイトとスマホサイトのurlが分かれている場合(フルレスポンシブでない) の紐付け link rel="canonical" の使用例

例えば、PC用サイトhttps://www.hoge.comがあるとて
スマホサイトがhttps://www.hoge.com/sp/
だった場合に
それぞれのhead内の link rel="canonical" をどのように書くべきか?

現象だけ言うと・・・
2つのURLの関係を link タグ、rel="canonical" 要素、rel="alternate" 要素で伝える

参考:https://developers.google.com/search/mobile-sites/mobile-seo/separate-urls?hl=ja

参考:https://webmaster-ja.googleblog.com/2013/05/5-common-mistakes-with-relcanonical.html

パソコン用のページのheadには

  <link rel="alternate" media="only screen and (max-width: 640px)" href="https://www.hoge.com/sp/">

スマホ用のページのheadには

  <link rel="canonical" href="https://www.hoge.com">

でよい。

なお、上記の場合は、
当たり前ですが
.htaccessにユーザーエージェント毎に表示サイトを替える記述が必要

.htaccessの記述例

  <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
  RewriteCond %{QUERY_STRING} !mode=pc
  RewriteRule ^$ /sp/ [R,L]
  
  #スマホでtopページ(index.html)に来た場合は/sp/へ移動
  RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
  RewriteCond %{QUERY_STRING} !mode=pc
  RewriteRule ^index.html$ /sp/ [R,L]

  #ページ毎に設定したい場合は、ページ毎指定するのが管理が楽だと思う。
  #PCには存在するページがスマホでは存在しない場合とかね。
  RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
  RewriteCond %{QUERY_STRING} !mode=pc
  RewriteRule ^/profile/index.html$ /sp/profile/index.html [R,L]
  
  #もしスマホサイトにパソコンでアクセスしたらPCサイトに移動する
  #要はパソコンでアクセスしたら/sp/を URL からとるって流れ
  RewriteCond %{REQUEST_URI} /sp/
  RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android|Windows\ Phone)
  RewriteRule ^sp/(.*)$ $1 [R]
  RewriteBase /

  </IfModule>

これは、PC用サイトhttps://www.hoge.comに対し
スマホサイトがhttps://www.sp.hoge.com
の場合でも同じルールで書くことができる

パソコン用のページのheadには

  <link rel="alternate" media="only screen and (max-width: 640px)" href="https://www.sp.hoge.com">

スマホ用のページのheadには

  <link rel="canonical" href="https://www.hoge.com">

こちらは、スマホサイトがサブドメインで分かれているため、
.htaccessにユーザーエージェント毎に表示サイトを替える記述はいらない