最初に、トップと記事の確認先を決める

自分が管理するサイトのトップと、実在する記事を一つ選びます。それぞれHTTP・HTTPSとwwwの有無を変えた4つのURLを確認します。トップへの転送が正常でも、記事がトップへ飛ばされることがあるためです。先に「最終的に開いてほしいURL」をメモしてください。

URL点検ツールを使う場合も、トップを点検して対象URLと取得時刻を照合・保存し、その後に実在する記事を別に点検します。1回で調べるのは1ページの4入口です。GETの応答列を記録表へ写す場合、HEADや初回Locationの生の値は含まれないため、別途取得するまで未確認と残してください。再利用した結果は新しい取得と区別し、途中で止まった応答列から最終値を推測しません。本文の表示はブラウザで別に確認します。

確認中は転送設定を変えず、まず応答とLocationを記録します。curlの-IはHEADリクエストなので、GETと異なる挙動が疑われる場合は通常のページ取得でも確認します。CDNやリバースプロキシがある場合は、外部からの応答とオリジンサーバーの設定を分けて考えます。

HTTPSで開けることと、HTTPが転送されることは別

evulixの8月3日以前の設定にはwwwを非wwwへ送るルールがあり、転送先はHTTPSでした。しかし非wwwのHTTPには転送ルールがなく、運用記録ではhttp://evulix.com/が200を返していました。HTTPSのページを普段使いのブラウザで開くだけでは、この入口の欠落に気づけません。

そこで公開前に「http+非www」「http+www」「https+非www」「https+www」を別々に確認します。記事URLでも同じ組み合わせを試し、トップだけでなくパスが保たれるかを見ます。今回の修正では非wwwのHTTPSを正規URLとし、ほかの入口はそこへ転送する構成にしました。

エックスサーバーでHTTPからHTTPSへ転送する

先に証明書を設定し、HTTPSで対象ページを開けることを確認します。以下は新サーバーパネルの案内です。

  1. ドメインの設定を開く

    サーバーパネルの「ドメイン設定」で、対象ドメインの詳細を開きます。変更前のHTTPS転送設定を控え、すでに.htaccessやCDNで転送していないかを確認します。

  2. HTTPS転送を有効にする

    HTTPS転送設定の「HTTPSに転送する」を選び、「設定する」で確定します。対象ドメインにSSL証明書がなければ有効にできません。設定場所が異なる場合は、公式マニュアルで使用中のパネルを選んで確認します。

  3. トップと記事のHTTP入口を確認する

    トップと実在する記事をHTTPで取得し、LocationがHTTPSの同じページを指すか確認します。wwwの有無の統一は別の設定です。次の節の4入口の照合で、ホスト名も含めて確認します。

同じ転送をパネルと.htaccessへ重ねて追加する必要はありません。転送がループしたら変更した設定を戻し、CDN・プロキシ・アプリ側の規則も確認します。

手順の参照:エックスサーバー:Webサイトの常時SSL化(別タブ)。に資料を確認しました。

.htaccessでHTTPSとwwwの有無を統一する

Apache 2.4のmod_rewriteを使い、Apache自身がHTTPSを正しく判定できる構成向けの例です。CDNやプロキシでTLSを終端する構成には、そのまま適用しません。

  1. 正規URLと、設定するファイルを決める

    この例はhttps://example.comを正規にします。wwwあり・なし両方のDNSと証明書を確認し、公開ディレクトリ直下の.htaccessを控えます。Laravelなら通常はpublic側です。既存のアプリ用ルールを消さないでください。

  2. 仮の302で転送を確認する

    下のexample.comを自分の正規ドメインへ置き換え、既存のフロントコントローラー用ルールより前へ置きます。まず302のまま、4入口と記事のパス、必要なクエリ文字列を確認します。wwwを正規にしたい場合は、ホスト条件と転送先の両方を変更します。

  3. 確認できたら301へ変更する

    正規HTTPSが再転送されず、ほかの入口から意図したページへ届くことを確認してからR=302をR=301へ変更します。変更後も同じURLで再確認します。ブラウザに過去の転送が残る場合は、curlの応答と照合します。

非wwwのHTTPSを正規にする説明用の設定(まず302で確認)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC,OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L]

フォームの送信先や内部リンクは、最初から正規HTTPSに揃えます。外部から届くX-Forwarded-Protoを無条件に信頼する条件は足しません。プロキシのある構成では、以下の専用の節と事業者の推奨設定を確認します。

手順の参照:Apache 2.4:HTTPS転送とホスト名の統一(英語)(別タブ)。に資料を確認しました。

修正後の4つの入口と到達先
  1. http://evulix.com/301 → https://evulix.com/
  2. http://www.evulix.com/301 → https://evulix.com/
  3. https://www.evulix.com/301 → https://evulix.com/
  4. https://evulix.com/200:正規ページを表示

2026年10月6日の確認記録を図に整理しました。HTTP転送漏れの修正後の状態で、リアルタイムの点検結果ではありません。記事のパスを保つことも別に確認します。

まず転送を追わず、応答とLocationを保存する

ターミナルでは下のコマンドを一つずつ実行します。最初は-Lを付けず、HTTPステータスとLocationヘッダーを確認してください。WindowsではPowerShellの別名と区別するためcurl.exe、macOSやLinuxではcurlを使います。対象ドメインは自分のサイトへ置き換えます。

301だけで合格にせず、Locationが想定したHTTPS・ホスト・パスを指しているか確かめます。次に-Lと--max-redirsで転送を追い、最終URLと転送回数を見ます。正規URL自身が転送され続けるならループの疑いがあります。HEADを扱わないサーバーでは-Iの結果だけで判断せず、GETの応答も確認します。

下の実測では、HTTPの記事入口をGETで転送を追わずに取得しても、同じ301とLocationになりました。これはこの一入口での比較で、すべてのサイトでHEADとGETが一致するという意味ではありません。macOSやLinuxではcurl.exeをcurl、-o NULを-o /dev/nullへ置き換えます。

  1. まず4入口を、転送を追わずに見る

    下の最初の4行はHEADです。各URLのステータスとLocationを控えます。正規HTTPSにLocationがなく200、別入口に想定した転送先があるかを比べてください。

  2. 記事のURLでも、最初の応答をGETで見る

    5行目は-Iと-Lを付けず、-D -でヘッダーだけを画面へ出します。本文はNULへ捨てます。HEADと違う場合は方法ごとに記録し、どちらが通常のページ取得に近いかを確認します。

  3. 転送後の値と、期待した記事を照合する

    最後の2行はGETで追跡し、トップと記事それぞれのfinal・redirects・statusを出します。自分の確認では残る入口にも同じ追跡を行い、8入口の記録を揃えます。最後に本文をブラウザで開いてください。

公開URLの応答を確認する(Windows)
curl.exe -sS -I --max-time 15 http://evulix.com/
curl.exe -sS -I --max-time 15 http://www.evulix.com/
curl.exe -sS -I --max-time 15 https://evulix.com/
curl.exe -sS -I --max-time 15 https://www.evulix.com/
curl.exe -sS -D - --max-time 15 -o NUL http://evulix.com/essays/small-site-launch-checklist
curl.exe -sS -L --max-redirs 5 --max-time 20 -o NUL -w "final=%{url_effective} redirects=%{num_redirects} status=%{http_code}" http://evulix.com/
curl.exe -sS -L --max-redirs 5 --max-time 20 -o NUL -w "final=%{url_effective} redirects=%{num_redirects} status=%{http_code}" http://evulix.com/essays/small-site-launch-checklist

4つの入口で確認する期待値

非wwwを正規にしたサイトの例です。wwwを正規にするサイトでは期待値を入れ替えます。

入口期待する動作違っていたとき
http://example.com/pathhttps://example.com/pathへ転送HTTP用の転送条件を確認
http://www.example.com/path正規HTTPSへ転送ホストとHTTPSのルールを確認
https://example.com/path意図したページを返すループ・別URLへの転送を確認
https://www.example.com/path非wwwのHTTPSへ転送www側の証明書も確認

トップと記事、8つの入口を照合した結果

Windowsのcurl 8.21.0で、最初はHEAD、転送後はGETで取得しました。ログイン・Cookieなし。記事の「同じパス」は /essays/small-site-launch-checklist です。Locationは初回応答の値、転送回数と最終200はGETの値です。

対象と入口最初の応答・LocationGETの最終URL・転送回数
トップ / HTTP・非www301 → https://evulix.com/https://evulix.com/ / 1回・200
トップ / HTTP・www301 → https://evulix.com/https://evulix.com/ / 1回・200
トップ / HTTPS・非www200 / Locationなしhttps://evulix.com/ / 0回・200
トップ / HTTPS・www301 → https://evulix.com/https://evulix.com/ / 1回・200
記事 / HTTP・非www301 → https://evulix.com/essays/small-site-launch-checklist正規HTTPSの同じパス / 1回・200
記事 / HTTP・www301 → https://evulix.com/essays/small-site-launch-checklist正規HTTPSの同じパス / 1回・200
記事 / HTTPS・非www200 / Locationなし正規HTTPSの同じパス / 0回・200
記事 / HTTPS・www301 → https://evulix.com/essays/small-site-launch-checklist正規HTTPSの同じパス / 1回・200

一つの値だけで完了にしない

最初の応答と、転送を追った結果を並べます。200や301という数字だけでは、期待したページへ届いたかは分かりません。

見る値読み取れること次の確認
最初のステータス301なら、その応答は恒久転送を指示しているLocationのHTTPS・ホスト・パスが期待と一致するか
Location次に移動する先。最終到達先とは限らないトップへパスが落ちていないか。さらに転送されるか
final / redirects実際の最終URLと、追跡した転送回数正規URL・記事パスと照合。複数回なら各応答を調べる
status=200最後のHTTP応答が200だった本文を開き、別ページやログイン画面でないか確認
curlのエラー取得や追跡が完了していない結果を未確認にして接続・証明書・転送の条件を調べる

プロキシのある環境では、HTTPSの判定場所を確認する

evulixのホスティング環境では、手前のプロキシでTLSを処理し、その奥のApacheへリクエストが届きます。8月3日の調査ではHTTPSとX-Forwarded-Protoの両方の値を確認してから、HTTPの入口だけが転送される条件を追加しました。サーバーが受け取る値を調べずに一般的な転送ルールを足すと、HTTPSでもHTTPと判定される場合があります。

設定変更前のファイルを控え、変更後は正規のHTTPSページから確認します。繰り返し転送されるときは追加したルールを戻し、ホスティング事業者の推奨設定とプロキシの扱いを確認してください。外部から送れるヘッダーを無条件に信用する構成にはせず、信頼するプロキシの範囲も環境側で管理します。

URL確認のあとに、読者が使う入口を通す

正規URLのページでは、HTMLのcanonical(正規ページとして示すURL)、内部リンク、XMLサイトマップが同じURL方針に揃っているか確認します。転送とcanonicalは別の仕組みです。canonicalを書いても、HTTPの応答そのものがHTTPSへ転送されるわけではありません。

最後に未ログインのブラウザで記事、カテゴリ、連絡先、存在しないURLを開きます。連絡先は入力エラーと送信後の表示を確認し、受信側でも届いたことを確かめて完了にします。記録には確認日、対象URL、期待値、実測値、修正内容を残してください。設定ファイルの存在だけでは、配信中の動作は証明できません。

期待と違う応答を、三つに分けて調べる

HTTPが200のままなら、HTTPSへ送る規則がどこで適用されるかを確認します。転送を繰り返すなら、転送先と元の条件が互いに送り返していないかを確認します。記事がトップへ飛ぶなら、パスを保持する設定とLocationを確認します。観測結果だけから一律に.htaccessの同じ行を足さないでください。

curl: (47)なら追跡回数の上限に達しています。ループを含め各Locationを確認し、上限を増やすだけで解決にしません。curl: (28)は制限時間内に取得できなかった状態、curl: (60)は証明書を検証できなかった状態です。200がない取得を成功と記録せず、日時・対象・エラーを残します。証明書のエラーを消すために検証を無効にして公開確認を終えないでください。

変更前の設定を控え、原因に対応する一箇所を直したら同じ入口で再確認します。最後に本文と配信ファイルが読めること、canonicalとサイト内リンクが正規URLを使うことまで確認して記録します。転送の結果だけでフォームや本文の品質まで確認したとは扱いません。

HTTPのまま表示される

HTTPのまま表示される

観測したこと
転送経路の最後がhttp://で、200を返している状態です。
次に確認すること
運営担当は正規のHTTPS URLと対象パスを控えます。設定担当はHTTP側で適用される転送規則と、プロキシのHTTPS判定を確認してください。
同じ条件で再確認
変更後、同じパスの4入口を点検し、HTTPSへ到達することと本文が読めることを確認します。
転送が同じURLへ戻る

転送が同じURLへ戻る

観測したこと
転送経路に、一度通ったURLが再び現れています。
次に確認すること
経路を記録し、ホスト変更とHTTPS化の規則が互いに送り返していないか設定担当に確認します。変更直後なら控えた設定と比較してください。
同じ条件で再確認
同じ入口から最終ページまで到達し、正規URL自身もループしないことを確認します。
記事のパスが別の場所へ変わる

記事のパスが別の場所へ変わる

観測したこと
HTTPSには到達しましたが、入力した記事のパスと最終ページのパスが違います。
次に確認すること
意図した移転なら転送先の記事を照合します。全記事がトップへ飛ぶなど意図しない場合は、設定担当にパスを保持する規則とLocationを確認してもらいます。
同じ条件で再確認
トップと実在する記事を別々に点検し、それぞれ期待する内容へ到達することを確認します。
一時転送が含まれる

一時転送が含まれる

観測したこと
経路に302・303・307のいずれかがあります。一時転送だけで不具合とは決まりません。
次に確認すること
一時的な案内か、恒久的な移転かを先に決めます。ログインや処理後の転送を、番号だけで301へ置き換えないでください。
同じ条件で再確認
目的に合う応答と到達先を同じ入口で確認し、判断した転送方針を記録します。
200以外の応答が返る

200以外の応答が返る

観測したこと
取得できたHTTP番号を確認します。404は対象の不存在、403は制限など、番号によって確認先が変わります。
次に確認すること
運営担当は対象URLが正しいか確認します。ブラウザでも開けない場合は公開先を、ブラウザだけ開ける場合は点検ツールへの制限を設定担当と照合してください。
同じ条件で再確認
同じURLで応答と本文を確認します。自動取得を許可するためだけにアクセス制限を一律解除しないでください。
取得を完了できない

取得を完了できない

観測したこと
接続・証明書・時間制限、別ドメインへの転送などで最終ページを確認できていません。正常とも故障とも確定できません。
次に確認すること
説明と取得済みの経路を控え、ブラウザで同じ入口を開きます。別ドメインへ移転済みなら、所有する転送先URLで改めて点検してください。
同じ条件で再確認
時間を置いて同じURLを点検します。結果が得られなければ、未確認の入口と確認する担当を残します。
入口ごとの到達先が揃わない

入口ごとの到達先が揃わない

観測したこと
4入口の最後のURLを比較します。未確認の入口がある場合、揃っているとは判断できません。
次に確認すること
正規URLの方針を決め、異なる到達先で内容も違うか確認します。設定担当はホスト・HTTPS・パスの転送を別々に照合してください。
同じ条件で再確認
4入口が期待する同じHTTPS URLへ届くか確認します。到達先が同じでも表示・フォームは別に確認します。

自動点検の結果から、変更する前に確認すること

公開URL点検の結果は「確認できた」「問題」「要確認」「未確認」に分かれます。titleとdescriptionを取得できても、文章が分かりやすいか、検索に掲載されたかまでは分かりません。ページの本文と見比べて、主題に合ったタイトルと説明になっているかを確認します。

canonicalが最終URLと異なる場合は、どちらを正規ページにする方針かを先に確認します。重複ページの統合や移転のために別URLを指定していることもあります。転送設定、canonical、内部リンクを一度に変更せず、期待するURLを決めて一つずつ照合します。指定が複数あれば、そのままにせず採用する値を整理します。 検索対象から外すnoindexは、正規URLを選ぶ指定の代わりにはなりません。重複をまとめたいのか、検索対象から外したいのかを先に分け、公開方針に沿って確認します。

正規URLの指定はhead内で確認します。本文中の説明例やtemplate内のひな形は、実際のページ指定と区別してください。相対URLなら最初のbase hrefを基準にした解決先も確認します。たとえば指定が「/」でも、baseが別のドメインならそのドメインのトップを指します。?を含む正規URLを、点検ツールへの入力制限と混同して形式不正と判断しないでください。hreflang・lang・media・type属性付きのcanonicalは、Google検索の正規URL指定として使われないため、用途と属性を確認します。

noindexやnoneが出た場合は、公開ページなのか、意図的に検索から除外したページなのかを判断します。robots・googlebotのmeta指定とX-Robots-Tagの両方が確認先です。noneにはnoindexの指定も含まれます。特定のクローラー向けのヘッダーは対象も確認してください。指定がない結果でも、robots.txtや検索への登録状況まで確認したことにはなりません。

未確認の入口が残っているなら「残りはたぶん正常」とせず、接続、証明書、応答時間、制限をブラウザや管理画面でも調べます。点検レポートを出力し、設定の変更前後を同じURLで比べてください。保存した過去の結果は最新の状態ではありません。修正後は再点検し、表示・問い合わせの到達も手動で確認します。

URL点検の各項目では「修正・再確認を記録する」を開き、期待するURL、担当・予定日、変更内容、再確認の日時と結果をその場で記入できます。ブラウザへ明示的に保存すれば続きを開けます。同じURLを再点検するとメモは引き継がれますが、以前の結果からの記録と分かるよう記入元の取得日時を表示します。新しい応答と本文を照合し、実際に確認した内容だけ追記して保存してください。Markdownと印刷にも記入内容を含められます。

ページタイトルを見直す

ページタイトルを見直す

観測したこと
取得したtitleの値を本文と並べます。指定が見つかることと、内容を伝えることは別です。
次に確認すること
編集担当は誰のどの作業を扱うページか分かる文にします。未指定なら、そのページのテンプレートやCMSのタイトル欄を実装担当と確認してください。
同じ条件で再確認
同じURLを再点検し、値とページの見出し・本文が対応するか読みます。検索結果の実際の表示は別に確認します。
検索向けの説明を見直す

検索向けの説明を見直す

観測したこと
取得したdescriptionが、そのページでできることを説明しているか確認します。
次に確認すること
編集担当は本文にない成果やサービスを約束していないか照合します。説明がない場合は、CMSやテンプレートの出力場所を確認します。
同じ条件で再確認
再点検した指定と本文を照合します。指定した文が必ず検索結果へそのまま出るとは扱いません。
正規URLが最終URLと違う・指定がない

正規URLが最終URLと違う・指定がない

観測したこと
取得先URLと、head内のcanonicalが示すURLを照合します。相対指定は最初のbase hrefを基準に解決した先を確認します。意図した統合先を指すこともあります。
次に確認すること
正規ページの方針を先に決めます。編集・設定担当で転送、内部リンク、サイトマップと照合し、不一致という理由だけで自己参照へ書き換えないでください。本文やひな形内だけの指定、hreflang・lang・media・type属性付きの指定は、head内の正規URL指定と分けて確認します。?を含む指定も形式不正と決めず、公開方針と照合してください。
同じ条件で再確認
同じURLを点検し、採用した正規URLと配信中の指定が一致するか確認します。Googleが選んだ正規URLはSearch Consoleで別に確認します。
同じページ指定が複数ある

同じページ指定が複数ある

観測したこと
title・description・canonicalの該当する指定が複数見つかっています。
次に確認すること
ページのHTMLで重複箇所を確認し、CMS、共通レイアウト、個別テンプレートのどこが出力するか実装担当が特定します。採用する値を決めて出力元を整理します。
同じ条件で再確認
同じURLを再点検して重複が解消したことと、残した値が意図した内容であることを確認します。
検索除外の指定と公開方針を確認する

検索除外の指定と公開方針を確認する

観測したこと
全ロボットまたはGooglebot向けの検索除外指定です。検索から外す目的のページなら意図した設定です。
次に確認すること
公開方針を確認し、検索に載せたいページだけHTMLのmetaとX-Robots-Tagの出力元を調べます。非公開情報を含むページの指定を機械的に削除しないでください。
同じ条件で再確認
配信中の指定を再点検します。robots.txt、Googleの登録情報、検索への掲載はこの結果だけでは判断できません。