メタタグは、ページのソース表示(Ctrl+U)でtitle・description・canonical・OGPを検索すれば確認できます。ただし、ソース表示はサーバーが返した元のHTML、開発者ツールはJavaScriptが動いた後のページ、Search ConsoleのURL検査はGoogleが受け取った結果を見せるので、3か所で中身が食い違うことがあります。canonicalとrobotsは元のHTMLの <head> にあるかで判断し、canonicalがGoogleに届いたかはURL検査の「ユーザーが指定した正規URL」で確かめます。
確認する場所は3つ:それぞれ見えるものが違う
| 場所 | 見えるもの | 向いている確認 | 見落とすこと |
|---|---|---|---|
| ソース表示(curlも同じ) | サーバーが返した元のHTML | canonical・robots・OGPが最初から入っているか | JavaScriptで後から足したタグは見えない |
| 開発者ツール(要素パネル・コンソール) | JavaScriptが動いた後のページ | ブラウザで最終的にどうなったか | 元のHTMLに無いタグも見えるので「入っている」と誤解しやすい |
| Search ConsoleのURL検査 | Googleが受け取ったページと、Googleの判断 | canonicalがGoogleに届いたか(ユーザーが指定した正規URL) | タグの一覧画面は無い。インデックス登録済みか、ライブテストで登録可能なURLでないと詳細が出ない |
判断の軸は1つです。canonicalについてGoogleは、<head> 内にある場合だけ受け付け、できるだけ元のHTMLに書き、JavaScriptで書き換えないよう求めています。だから「開発者ツールで見えた」は合格の根拠になりません。元のHTMLの <head> に正しい値がある状態を合格にします。
確かめる順番:5つの手順
1. ソース表示で、元のHTMLにタグがあるかを見る
Windowsは Ctrl+U、Macは Command+Option+U でソースを開き、ページ内検索で <title、name="description"、name="robots"、rel="canonical"、og: を順に探します。canonicalとrobotsは、ここに無ければ「無い」と判断します。
2. 開発者ツールのコンソールで、描画後のタグを一覧にする
下のコードをコンソールに貼ると、描画後のページにあるtitle・meta・canonicalを一覧にし、それぞれが <head> と <body> のどちらにあるかも出します。手順1と食い違うタグは、JavaScriptで足されたか書き換えられたものです。
3. SNSのクローラーとして取ったHTMLと比べる
OGPはSNSのクローラーが読みます。ターミナルで User-Agent をFacebookのクローラー(facebookexternalhit)にして取ると、SNSに渡るHTMLが確かめられます。フレームワークによっては、ブラウザ向けと中身が変わります。
4. URL検査で、canonicalがGoogleに届いているかを見る
Search ConsoleのURL検査で「ユーザーが指定した正規URL」を見ます。ページにcanonicalを書いたのにここが空なら、Googleは受け取れていません。「Googleが選択した正規URL」が別のURLなら、Googleは別のページを正規と判断しています。
5. チェックツールで、抜けと文字数をまとめて確かめる
最後にツールで全体を見ます。ツールはサーバーが返した元のHTMLを読むので、手順1と同じ立場の結果です。描画後にしか無いタグは「無い」と出ます。それが正しい指摘か、手順2と比べて判断します。
手順2:コンソールに貼るコード
[...document.querySelectorAll('title, meta[name], meta[property], link[rel="canonical"]')]
.map((el) => ({
where: document.head.contains(el) ? 'head' : 'body',
tag: el.getAttribute('name') || el.getAttribute('property') || el.getAttribute('rel') || 'title',
value: el.getAttribute('content') || el.getAttribute('href') || el.textContent,
}))手順3:SNSのクローラーとして取る
curl -s -A "facebookexternalhit/1.1" https://example.com/ | grep -oE '<(title|meta|link)[^>]*(og:|description|canonical|robots)[^>]*>|<title>[^<]*'curlの結果の読み方(scriptの中の文字に引っかかる落とし穴)はSPAはAIクローラーに読まれているかに、URL検査の状態の見分け方は検出 - インデックス未登録の原因と対処にまとめています。
タグごとの合格ラインと、直すべき状態
| タグ | 合格 | 直す |
|---|---|---|
| title | ページごとに違い、主になる語が前にある | 無い・他のページと同じ・SVGのtitleと取り違えられている |
| meta description | ページの答えを要約している | 無い・全ページ同じ。ただし無くても順位の減点ではなく、Googleが本文から作る |
| meta robots | インデックスさせたいページに noindex が無い | 公開ページに noindex が残っている(テスト環境の設定の消し忘れが多い) |
| link rel="canonical" | <head> にあり、自分自身か正しい代表URLを指す | <body> にある・JavaScriptで書き換わる・別ページを指している |
| og:title / og:description / og:image / og:url | og:image が https:// から始まる絶対URL | og:image が相対パス・画像が404。SNSのクローラーには表示されない |
| meta viewport | width=device-width がある | 無い。スマホで縮小表示になる |
| meta keywords | 確認しなくてよい | Google検索では使われていない |
直す順番は、検索に出るかどうかを決めるものから。robots(noindex)とcanonicalが先、titleとdescriptionが次、OGPとviewportがその次です。titleを整えても、Googleは本文の見出しやog:titleなども材料にして検索結果のタイトルを作るため、書いたとおりに出るとは限りません。
書き方そのものはtitleタグの書き方・meta descriptionの書き方・canonicalタグの設定・OGPタグの設定方法で解説しています。この記事は「入っているか、正しく届いているか」の確かめ方に絞っています。
落とし穴1:メタタグが <body> に出ている(このサイトで実測)
Next.js 15.2以降は、動的に描画するページで、メタタグの準備を待たずにページを送り始め、できたメタタグを <body> の末尾へ流し込みます(ストリーミング)。JavaScriptを動かせないクローラーだけには、従来どおり <head> に入れて返します。このサイトで動的に描画している5ページを2026年10月23日に確かめたところ、メタタグが <body> 側に出ていたのは診断結果の共有ページだけでした。そのページを、取り方を変えて取得した結果です。
| 取得したUser-Agent | title・description・canonical・og:titleの位置 |
|---|---|
| ブラウザ(Chrome) | <body> の末尾 |
| Googlebot | <body> の末尾 |
| GPTBot(OpenAI) | <body> の末尾 |
| facebookexternalhit・Twitterbot・Slackbot | <head> |
さらにブラウザで描画し終えた後のページを開発者ツールで見ても、4つのタグは <body> に残ったままで、<head> へは移っていませんでした。Next.jsのドキュメントは「Googlebotなど、JavaScriptを実行してDOM全体を見るボットは正しく解釈することを確認した」としています。一方でGoogleは、canonicalを <head> 内でしか受け付けないと明記しています。
判断はこうです。2つの公式の説明が食い違う箇所に、検索に出るかを左右するcanonicalを置いておく理由はありません。このサイトでは同じ日に、Next.jsの設定(htmlLimitedBots)で、すべての取得にメタタグを <head> で返すよう変えました。影響するのは動的なページだけで、静的に作っている記事やツールのページは、もともと <head> に入っていました。
自分のサイトがNext.jsなら、ブラウザのUser-Agentとfacebookexternalhitでソースを取り比べてください。<title> の位置が違えば、このストリーミングが起きています。
落とし穴2:ツールがSVGアイコンのtitleを拾う
ロゴやアイコンをSVGで埋め込むと、読み上げ用に <title> 要素を入れることがあります。ブラウザがページのtitleとして使うのは、SVGの外にある最初の <title> です。ところがタグ名だけで探すツールは、SVGの中のtitleまで拾い、ページのtitleと取り違えます。
ディレベースのチェックにもこの取り違えがありました。最後に見つけた <title> で上書きしていたため、本文にSVGのtitleがあると、そちらを報告していました。2026年10月23日に、本番と同じCloudflare Workersの環境で次の3つのHTMLを読ませ、修正前後を比べています。
| ページのHTML | 修正前 | 修正後 |
|---|---|---|
| <head> にtitle、本文のSVGロゴにもtitle | SVGのtitle | <head> のtitle |
| <head> にtitleが無く、本文にSVGのtitleと本物のtitle | SVGのtitle | 本物のtitle |
| SVGの中にしかtitleが無い | SVGのtitle | titleなし(ブラウザと同じ) |
ツールでtitleが見覚えのない短い語(サイト名やロゴの名前など)になっていたら、まずソース表示で、SVGの中に <title> が無いかを確かめてください。ツールの指摘より、手順1の元のHTMLが正です。
落とし穴3:開発者ツールで見えたから大丈夫、と判断する
タグマネージャーやJavaScriptでcanonicalやdescriptionを足しているサイトでは、開発者ツールには正しく出ます。けれど元のHTMLには無いか、別の値が入っています。SNSのクローラーはJavaScriptを動かさないため、OGPを後から足しても共有時の表示には反映されません。
Googleは、元のHTMLでcanonicalを設定できない場合は、元のHTMLには入れずJavaScriptだけで設定するよう案内しています。元のHTMLとJavaScriptで違う値を出すのがいちばん悪い状態です。手順1と手順2の結果が一致しているかを、合否の基準にしてください。
関連ツール
出典(2026年10月23日に確認)
よくある質問
メタタグをいちばん手早く確認する方法は?▾
Search Consoleでメタタグを確認できますか?▾
ソース表示と開発者ツールで、titleやcanonicalが違うのはなぜですか?▾
メタタグが <head> ではなく <body> に出ていたら問題ですか?▾
meta keywords は確認しなくていいですか?▾
チェックツールでtitleが実際と違って表示されるのはなぜですか?▾
元のHTMLに何が入っているかを、まとめて確かめる
URLを入れるだけで、title・description・canonical・OGPの有無と文字数を一覧にします。開発者ツールの結果と食い違うタグがあれば、そこが直す場所です。
メタタグをチェックする
この記事を書いた人
今井政和SEOディレクター / フロントエンド開発者
Web業界20年以上の経験を持つSEOディレクター。ディレベースの開発者。WordPress公式プラグイン「ORECTIC SEO CHECK」作者。著書に「三方良しで勝つ 江戸商人に学ぶ現代WEB戦略」。
@imai_directorあわせて読みたい
OGPタグの設定方法|SNSシェア時の表示を最適化するチェックツール
OGPタグの設定方法・og:imageの推奨サイズ・Twitter Cardとの違いを解説。SNSシェア時の表示を無料でチェック。
meta descriptionの書き方と文字数|チェックツールで今すぐ診断
meta descriptionの最適な文字数・書き方のコツ・よくある失敗パターンを解説。URLを入れるだけで設定状況を無料チェック。
titleタグの書き方と文字数|SEOに効く最適な設定をチェック
titleタグの最適な文字数・書き方のコツ・Googleに書き換えられない設定方法を解説。URLを入れるだけでtitle設定を無料チェック。
SEOスコアの目安は何点?ツールで点数が違う理由と直す順番
SEOスコアに共通の合格点はありません。Lighthouseとの採点の違い、100点の内訳、プランで変わる満点、実際の診断結果を使って、点数の読み方と直す順番を解説します。