Google Search Console その3 URL 検査

Google Search Console Logo

その1 Google Search Console に登録
その2 検索パフォーマンス
その3 URL 検査 ←(今回)
その4 インデックス
その5 拡張
その6 セキュリティと手動による対策 / リンク
その7 その他のツール・ヘルプまとめ

URL 検査の使い方

URL 検査では、サイトの中の特定のページについて、Google のインデックス状況、サイトマップ情報、クロール情報、モバイルユーザビリティなどが調べられます。

インデックスの確認

Google クローラが、ページをインデックス登録しているか確認します。
左のメニュー欄の「URL 検査」をクリックすると、上の URL 入力欄がフォーカスされます。そこに検査したいページの URL を入力します。

Google にインデックスされている場合

「クロール済みのページを表示」をクリックすると、ページのリソースが表示されます。

これは、インデックスされたリソースであって、現在の実際のページが更新されていて、まだインデックスされていない場合、インデックスのページと実際のページの間に違いがあるかもしれません。
「その他の情報」をクリックすると、「HTTP レスポンス」などが確認できます。

インデックスされていない場合

インデックス登録されていない場合、クロールをリクエストする方法は2つです。

・ この画面の「インデックス登録をリクエストする」をクリックする(↑ の画像の赤丸部分)
・ このページを含めた新しいサイトマップを送信する

Google Search Console でサイトマップを送信する方法

WordPress のプラグイン「All in One SEO Pack」などでは、定期的にサイトマップを更新する設定もあります。
All in One SEO Pack の XML サイトマップの更新を予約

インデックスの詳細

2段目の「ガバレッジ」をクリックすると、インデックスの詳細が表示されます。


ページが含まれるサイトマップや、クロールに関する情報が分かります。

インデックスのステータスが「有効」の場合、一番上に「送信して登録されました」を表示されますが、ステータスが「エラー」「警告」「除外」の場合、ここにそれぞれの理由が表示されます。

一番下の「レポートを開く」をクリックするとステータスについて確認できます。

また「詳細」をクリックすると、これに関する Google のヘルプに行くので、ステータスが「エラー」「警告」「除外」の場合、そこで解決方法を探ることができます。

拡張

拡張一番下の「拡張」の欄では、「モバイル ユーザビリティ」「AMP」「リッチリザルト」が確認できます。

モバイル ユーザビリティ

モバイル フレンドリーかどうか、Google のサイトの評価にもかかわってくるので、大切ですね。
モバイル フレンドリーの場合、このように表示されます。

クリックすると詳細が表示されます。
モバイル フレンドリーでない場合、「互換性のないプラグイン」「ビューポートが設定されていません(レスポンシブ対応でない)」「テキストが小さすぎます」など、エラーが表示されます。

AMP

AMP(モバイル向け高速化ページ)が設定されている場合、その検査結果が表示されます。設定されていない場合、表示されません。

AMP については、後日まとめます。

リッチリザルト

リッチリザルト(構造化データ)が設定されている場合、その検査結果が表示されます。設定されていない場合、表示されません。

Google Search Console でサポートされるリッチリザルトのタイプは、以下の通りです。
パンくずリスト / データセット / イベント / FAQ / ファクト チェック / How-to / 求人情報 / ロゴ / 商品 / Q&A ページ / レシピ / レビュー スニペット / サイトリンク検索ボックス / Video

リッチリザルトについては、後日まとめます。

公開 URL をテスト

一番上に戻りますが、右上の「公開 URL をテスト」をクリックすると、インデックスされた URL ではなく、現在公開中の URL について検査できます。ページの更新後、現在インデックス登録されているページと変更後のページを比較することができます。

公開 URL の検査結果が表示されます。インデックス可能な場合な「URL は Google に登録できます」と表示されます。登録に問題がある場合は、表示されている警告やエラーの情報を読んで、記載されている問題を解決します。

公開 URL の検査結果の右上に、タブが二つ表示されます。

「Google インデックス」⇒ インデックス登録されているページの検査結果
「ライブテスト」⇒ 今現在公開されているページの検査結果

問題なければ、「インデックス登録をリクエスト」をクリックして、更新後のページをクロールさせます。
(更新したサイトマップの送信でも、インデックス登録はできます。)

「テスト済みのページを表示」をクリックすると、ページのリソースが表示されます。

インデックスされたページ(クロール済みのページ)を表示するのと同じなんですが、こちら、ライブテストの方は「スクリーンショット」が利用できます。Google がページをどのように捉えているか、ビジュアル的に分かります。

ここで形が崩れていたり、きちんと想定通りに表示されない場合、何かしらのファイルを Google が認識していないということになります。
↑ の画像の場合、ページのトップ画像を認識していませんね・・・。
そんな時は、一番右のタブ「その他の情報」→「ページのリソース」を見ると、読み込めなかったリソースが表視されるので確認します。

トップ画像とスクリプトを2つ認識していませんね。何ででしょう?ブラウザで普通に表示する場合、問題ないのに。
Google のヘルプを読んでいたら、その原因となるのは以下の4つのどれかのようです。

1. 妥当な時間内にリソースを読み込めなかったため
2. 指定された場所にリソースが存在しないため(404 エラー)
3. ログインしていないとアクセスできないリソースであるため
4. robots.txt ファイルにより、そのリソースで Googlebot をブロックしているため

私の場合、2 ~ 4 は当てはまらないので、「1. 妥当な時間内にリソースを読み込めなかったため」が原因のようです。再度、公開 URL をテストし直したら、すべて読み込まれました。上手くいかない場合は、速度テストをして、サーバーの状態を確認した方がいいのでしょうね。

4. の robots.txt ですが、wordpress の All in One SEO では、編集できる機能があります。
以前まとめた記事 ⇒ All in One SEO Pack robots.txt について
ここで色々なディレクトリを 「Disallow」にしてしまっていて、Google が読み込めない可能性もありますね。確認が必要です。

URL 検査結果からページを改善する

インデックスに登録できない場合

インデックス登録できない理由は、主にこのようなものが挙げられます。

noindex タグにより除外

あえて noindex タグを利用していればいいのですが、手違いで noindex になっている場合は、直します。
以前まとめた記事 ⇒ All in One SEO Pack での noindex の設定

ページにリダイレクトがある

リダイレクトがある場合は、重複してしまうので、インデックスされません。
以前まとめた記事 ⇒ .htaccess のリダイレクト

代替ページ(適切な canonical タグあり)

カノニカル URL を生成している場合、このように表示されるみたいですね。意図したとおりなら問題ありません。
以前まとめた記事 ⇒ All in One SEO Pack での noindex の設定

重複

カノニカルではなくてページが重複しているのは、問題ですね。サイト評価も下がってしまうおそれがあるので、統一します。

robots.txt によりブロック

意図したとおりにブロックされていればいいのですが、手違いでブロックされている場合は、robots.txt を書き換えます。
以前まとめた記事 ⇒ All in One SEO Pack robots.txt について

404

ファイルそのものが見つからないということなので、ちゃんと送信できているか、もしくは URL の打ち間違えがないかを確認します。

品質に関するガイドライン

インデックス登録されるかされないかとは別に、Google のガイドラインは重要ですね。
Google からのコピペです。あまりひどいことをするとインデックス登録されなくなってしまうし、これを守ることが検索結果上位に表示されることにつながるのでしょう。

コンテンツの自動生成
リンク プログラムへの参加
オリジナルのコンテンツがほとんどまたはまったく存在しないページの作成
クローキング
不正なリダイレクト
隠しテキストや隠しリンク
誘導ページ
コンテンツの無断複製
十分な付加価値のないアフィリエイト サイト
ページへのコンテンツに関係のないキーワードの詰め込み
フィッシングや、ウイルス、トロイの木馬、その他のマルウェアのインストールといった悪意のある動作を伴うページの作成
リッチ スニペット マークアップの悪用
Google への自動化されたクエリの送信

Google Search Console その2 検索パフォーマンス

Google Search Console Logo

その1 Google Search Console に登録
その2 検索パフォーマンス ←(今回)
その3 URL 検査
その4 インデックス
その5 拡張
その6 セキュリティと手動による対策 / リンク
その7 その他のツール・ヘルプまとめ

検索パフォーマンスの見方・使い方

左のメニュー欄の「検索パフォーマンス」をクリックすると、デフォルトでは ↓ のような具合に表示されると思います。
このサイトのデータです。個人的な備忘録という感じでまったく SEO を行っていなかったのですが、それでもクリックされることがあったのか、と思うとうれしいですね。SEO を行うことで、どのようにデータが変わっていくのか、今後検証していきたいと思います。

ここで示されるデータは、Google 検索 での表示、それをユーザーがクリックした数であって、他の方法でのサイトへのアクセス(外部リンク、SNS 経由、ブックマーク登録、直接 URL 入力、他の検索エンジン経由、など)は含まれません。そういったデータは Google Analytics で解析できます。

絞り込み条件

検索パフォーマンスのページの一番上の部分、指定した絞り込み条件が、その下のグラフに反映されます。
デフォルトの条件は、「検索タイプ」と「日付」、さらに新規の条件を追加する方法は2つあります。

検索タイプ


「検索タイプ」をクリックすると、「フィルタ」と「比較」が選べます。

デフォルトでは、「フィルタ」タブの「ウェブ」が選択されています。
「画像」「動画」は、それぞれ Google 検索の、「画像検索」「動画検索」を意味しています。ここで選択した条件が、グラフに反映されます。

「比較」タブで2項目を選択すると、グラフに2項目が同時に反映されます。

日付

「日付」をクリックすると、対象となるデータの期間を選べます。
デフォルトでは、「フィルタ」タブの「過去3か月間」が選択されています。
「最新日」(閲覧している日の2日前)~「過去16か月間」まで選べます。また、「カスタム」を選択すると、解析したい期間を自由に選べます。

「比較」タブで、2つの期間を選択すると、グラフに2つの期間が同時に反映されます。

新規条件追加 ①

「+ 新規」をクリックすると、新規の絞り込み条件を追加できます。
「検索キーワード」「ページ」「国」「ディバイス」「検索での見え方」の項目の中から選びます。


項目を選択すると、更に条件の詳細を指定できます。

「比較」を選択すると、2条件が、グラフに同時に反映されます。

新規条件追加 ②

検索パフォーマンスの下の方、Google 検索データの欄でも、絞り込み条件を追加できます。
例えば、↓ の場合、「クエリ」の中の1行目の検索キーワード「ドロップダウンメニュー レスポンシブ」をクリックすると、それが絞り込み条件に追加されます。

グラフ

グラフの上部に、総数、平均のデータが表示され、それをクリックすると、その項目が日ごとのデータになり、グラフに反映されます。また、このグラフは、上の絞り込みで設定された条件の範囲で表示されます。

合計クリック数

Google 検索で、ユーザー「がクリックして、サイトに訪れた総数です。この総数は、上の絞り込み条件で限定された範囲での値となります。
デフォルトで、クリック数はグラフの項目として選択されていて、水色の線で、日ごとの値として表示されています。

合計表示回数

Google 検索で、ユーザーの検索結果に、自分のサイトへのリンクが表示された総数です。この総数は、上の絞り込み条件で限定された範囲での値となります。
デフォルトで、クリック数はグラフの項目として選択されていて、青色の線で、日ごとの値として表示されています。

平均 CTR

表示されたうち、実際にクリックされた割合の平均値です。
ここをクリックすると、グラフに緑色の線で、日ごとの値として表示されています。

平均掲載順位

検索結果にサイトのリンクが表示されたときの掲載順位の平均値です。
ここをクリックすると、グラフにオレンジ色の線で、日ごとの値として表示されています。

グラフの日ごとの値

グラフの上にカーソルを重ねると、日ごとの各項目の値が表示されます。

Google 検索データ

ユーザが Google 検索を行った際のデータの一覧です。
「クリエ」「ページ」「国」「デバイス」「検索での見え方」「日付」の6種類が選べ、表示されるデータの項目は、上のグラフの項目として選択されたものと同じになります。
デフォルトでは、「クリック数が多い順」>「表示回数が多い順」で表示されています。各項目をクリックして優先順位を入れ替えたり、項目脇の「↓」をクリックすると「少ない順」に並べ替えられます。

各データ(行)をクリックすると、上のグラフの絞り込み条件となります。

検索パフォーマンスから分かること

こんな風にデータが示されても、じゃあ、パフォーマンスを上げるためには何をすればいいのか?ということですが、Google のヘルプに対策らしきものが書かれています。

サイトのトラフィックが減少した理由

ここに書かれていることは、Google が言っているんだから、しっかり理解する必要があると思いますが、URL 検査で確認できるような SEO 的にミスはないか検証しましょう、というような内容です。

私のこのサイトのデータはまだまだ少なくて、ここから分かることは少ないのですが、自分なりに思ったことを、次回 SEO 対策を見返したときに参考になるよう、まとめてみます。

掲載順位は高いのにクリック数が少ない

「reload wordpress」というキーワード検索において、掲載順位は 5.3 位、表示回数もそこそこあるのにまったくクリックされていません。これはなぜでしょう?

実際に自分で Google で検索するとこのように表示されました。

なるほど、なるほど。説明文が良くありませんね。というより、検索結果表示用の説明文を用意していないので、ページの冒頭部分がそのまま引用されてしまっています。説明文を、簡潔に内容を伝えるようなものにすることで、クリック数は上がるのでしょう。
先日まとめた WordPress の All in One SEO Pack では、それぞれの説明文を設定することができます。他のプラグインや SEO 用テーマ、WordPress じゃなくても、様々なアプリがあるので、そういうものを利用して、適切な説明文を記述することは大切ですね。
また、リッチリザルト(後日まとめます)などを利用して、検索結果に分かりやすく表示させるということもできるのだと思います。

掲載順位が非常に低い

検索パフォーマンスでは、掲載順位は100位までしか表示されないので、それより下の順位に関しては分からないのですが、検索順位の低い方から並び替えてみると、こう表示されました。

自分が検索するとき、9ページ目までなんて見ないんで、「css 角丸」というキーワードで、しつこく検索している人がいるんだなー、なんて思いましたが、そんな内容の記事、自分は書いたのかな、と思い、何がヒットしているのか確認すると、これでした。

ボタンジェネレーターに関する記事で、検索キーワードと記事の内容にズレがありますね。
検索順位が低いというのは、関連性が低いということなんでしょうが、こんな9ページ目までしつこく検索する人がいるキーワードだ、ということかもしれません。「css 角丸」というキーワードに沿うような内容は、需要があるかもしれないので、例えば「ボタンジェネレーター」の記事が、自分にとって大切なページで、そこに集客したいとおもうなら、「css 角丸」に関連したページを作成して、誘導するということもできるのでは、と思いました。工夫が必要ですね。

特定のページにおける検索キーワードを確認する

「ページ」で特定の URL を選択し、絞り込み条件に加え、そのページに関するクエリを確認します。
https://web.hazu.jp/overflow-wrap-word-break/で絞り込んでみました。

キーワードごとの数値を確認すれば、どのような需要でユーザーはこのページをクリックしたのか、Google は検索結果を表示するにあたりどのような評価をしたのか、が分かります。自分の想定していたものとズレがあるのなら、想定したキーワードでヒットするように内容を見直さなくてはいけない、といえるでしょう。
このページの場合、私は、「overflow-wrap (word-wrap) と word-break の違い」についてまとめたのですが、検索キーワードを見ると、「効かない」というワードがたくさん見られます。一方、「違い」というワードはほとんどありません。つまり、「効かない」ということに需要があるわけで、そういった内容も含めれば、需要により応えられるページになると考えられます。

(そもそも)検索結果の掲載順位について

掲載順位が高いというのは、ユーザーの需要にマッチした情報を、検索結果に表示できているということになります。
一方、インデックスや URL に不備(次回以降これについてまとめます)があるわけでもないのに、検索結果に上がってこないとなると、Google の方でその情報が需要にマッチしていると判断していないとうことになります。

掲載順位は、外部リンクに大きく影響されるというのは有名な話ですが、多くの人が知りたいと思うコンテンツは被リンクを得やすいというのはその通りだし、特に立ち上げたばかりの若いサイトがやるべきことは、内容を充実させていくというのが一番大切なんでしょうね。
プラスアルファ、SEO の技術的なことを合わせて行っていくということなんでしょうね。

まだまだ、検索パフォーマンスを見て気が付くことが出てくると思うので、追記していきます。

Google Search Console その1 登録

Google Search Console Logo

Google のウェブマスターツール、Google Search Console、ウェブサイトの状態を知ることができるとても便利な機能が揃っていますね。

何を知ることができるのか、一言でいえば、
「Google は、私のサイトをどのように見ているのか?」(Google 検索エンジンによるサイト評価解析

ということですが、前回、Google Search Console と Google Analytics の主な機能や出来ることをざっくりですがまとめてみました。
Google Search Console & Google Analytics で出来ること

その1 Google Search Console に登録 ←(今回)
その2 検索パフォーマンス
その3 URL 検査
その4 インデックス
その5 拡張
その6 セキュリティと手動による対策 / リンク
その7 その他のツール・ヘルプまとめ

登録・所有権の確認

Google Search Console を利用するには、まず初めに、サイトの所有権を確認する必要があります。

① 登録画面

Google アカウントを持っていることが前提条件です。Google にログインした状態で、Google Search Console のサイトを開きます。


ここで二つのタイプの中から選べます。

<ドメイン>
ドメインに含まれるすべての URL(サブドメイン、www ありなし、HTTP も HTTPS も)を、全部まとめて解析します。

<URL プレフィックス>
入力されたアドレス/プロトコルの URL のみの解析となります。

このサイトの場合、プロトコルは HTTPS のみ、www なしで統一、URL は web.hazu.jp で、サブドメインを使っているので、「https://web.hazu.jp」のみ解析すればいいということになり、URL プレフィックスを選びます。

② 所有権の確認の方法の選択

「ドメイン」タイプの場合、「ドメイン名プロバイダ(DNS レコード)」でしか確認できないので選択する必要はないです。
「URL プレフィックス」タイプの場合、主に5種類の所有権の確認方法が表示されます。

<ドメイン名プロバイダ(DNS レコード)>

そのドメインが利用しているドメイン名プロバイダで、DNS 設定で、Google に指定された確認用の TXT レコードを作ります。

この作業は、それぞれのドメイン名プロバイダで手順が多少異なると思いますが、Google のヘルプで、主なドメイン名プロバイダでのそれぞれの手順が示されています。
ドメイン所有権の証明手順

Google のヘルプの一覧に、利用しているドメイン名プロバイダがない場合は、一般的手順を参考にします。
TXT 確認レコードを追加する(任意のドメインホスト)

DNS レコードを変更した後、確認までしばらく時間のかかる場合があります。

<HTML ファイル>
1. Google が生成した HTML ファイルをダウンロード。
2. そのファイルを、ウェブサーバーの Google が指定したディレクトリにアップロード。
3. 確認ボタンをクリック。

<HTML タグ>
1. Google が生成した メタタグをコピー。
2. サイトのホームページにある<head>内にコピーしたメタタグを張り付ける。
3. 確認ボタンをクリック。

このメタタグですが、WordPress で、All in One SEO Pack などの SEO を行うプラグインやテーマでは、記入できる欄があり、<head>に直接書き込まずに所有権確認作業ができます

先日書いた記事です。⇒ All in One SEO Pack での Google Search Console 所有権確認

<Google Analytics>
Google Analytics をすでに利用している場合、自動的に所有権の確認がされます。
Google Analytics を利用しているのと同じ Google アカウント(編集権限のある)でログインしていなくてはいけません。

Google Analytics については、後日まとめます。

<Google タグマネージャー>
Google タグマネージャー をすでに利用している場合、自動的に所有権の確認がされます。
Google タグマネージャー を利用しているのと同じ Google アカウント(公開権限のある)でログインしていなくてはいけません。

<その他>
Google のブログサービス「Blogger」、または 「Google ドメイン」を利用している場合、自動的に Google Search Console へ登録されます。

③ 登録完了後


確認後、左のメニュー欄「プロパティを検索」をクリックすると、登録された ドメイン、または URL が表示されます。

それをクリックすると、「サマリー」が表示されます。

Google Search Console & Google Analytics で出来ること

Google Analytics Search Console Logos

Google が提供する無料のウェブマスターツールには、「Google Search Console」というのと「Google Analytics」というのがありますが、どちらも使いこなして上手にサイトを最適化したいですね。

Search Console と Analytics、これで一体何を知れるのでしょう?違いって何でしょう?
一言で言ってしまえば、こんな感じかと思います。

Google Search Console ⇒ Google は、私のサイトをどのように見ているのか(Google 検索エンジンによるサイト評価解析
Google Analytics ⇒ どのようなユーザーが、私のサイト内で、どのように行動したのか(ユーザーアクセス解析

主な機能と、それがどんな目的で、どんな改善ができるかをまとめてみました。

Google Search Console

機能 説明 目的・改善方法
検索パフォーマンス Google 検索でサイトを表示した回数、
クリック数、検索ワード、
検索された国、ディバイスなど
表示数、クリック数の増減の原因を探る。
想定した検索ワードでサイトが表示されているか
確認、内容を充実させる。
ページの状態 インデックス確認、クロール情報
ページテスト、登録されたサイトマップ
モバイルユーザビリティ
インデックスされてないものはクロールさせる。
判明したページの不備を修正。
サイトマップ サイトマップの追加
送信されたサイトマップの確認
送信されていないサイトマップを送信する。
リンク 外部リンク、内部リンクの確認 リンクを充実させる。
問題の検出 セキュリティ等の問題自動検出 指摘された部分の修正をする。

関連記事

Google Search Console その1 登録
Google Search Console その2 検索パフォーマンス
Google Search Console その3 URL 検査
Google Search Console その4 インデックス
Google Search Console その5 拡張
Google Search Console その6 セキュリティと手動による対策 / リンク
Google Search Console その7 その他のツール・ヘルプまとめ

Google Analytics

機能 説明 改善方法
ユーザー解析 アクセスしたユーザー数、ページビュー数、
ユーザー層、システム、ディバイス、など
ターゲティングに繋げる。
こちらの活動の影響具合を確認。
行動解析 行動フロー、ページ別閲覧データ、など 導線の改善、内容の充実の参考にする。
集客 チャネルの解析、
広告、Search Console、SNS とのリンク
入り口を広げ、集客に繋げる。
コンバージョン 目標の設定 異なる目標を立て、そこに至るまでのユーザーの
操作を分析し、コンバージョンの価値を確認。

関連記事

Google アナリティクス アカデミー

【WordPress プラグイン】All in One SEO Pack – その2 機能管理

all in one seo pack logo

WordPress のプラグイン、All in One SEO Pack についてまとめています。
その1 一般設定
その2 機能設定 ← 今回

WordPress の左のメニュー欄 →「 All in One SEO 」→「機能管理」をクリックすると、このような画面が表示されます。

デフォルトでは「パフォーマンス」のみ有効化されていますね。
それぞれの項目の「 activate 」をクリックして有効化すると、左のメニューにその項目が追加されます。
追加されたメニューをクリックすると、それぞれの設定画面が表示されます。

目次
1. XML サイトマップ
2. ソーシャルメディア
3. Robots.txt
4. ファイルエディター
5. インポーター&エクスポーター
6. 悪意あるボットのブロッカー
7. パフォーマンス

XML サイトマップ

XML サイトマップ とは?
ウェブサイト内の各ページのURLや優先度、最終更新日、更新頻度、画像数などを記述したXML形式のファイルで、ウェブサイトの状態を検索エンジンに知らせる重要な役割を持っています。クローラーに分かりやすく伝えることで、サイトのパフォーマンスを向上させます。

サイトマップのステータス

「 XML サイトマップを表示」という部分をクリックすると、All in One SEO Pack によって生成された XML サイトマップが表示されます。

「 Images 」→ 画像数
「 Priority 」→ 優先度
「 Change Frequency 」→ 更新頻度
「 Last Change 」→ 最終更新日時

この内容は、以下の XML サイトマップの設定が反映されています。

XML サイトマップ

RSS サイトマップを作成
サイトマップは XML サイトマップの他に、RSS フィードを利用したサイトマップもあります。RSS では、最近の変更を記述するので、容量が小さく、結果を素早く反映させることができます。更新の多いサイトは、XML、RSS どちらも利用するのが良いようです。

更新を予約
どの頻度でサイトマップの更新を検索エンジンへ通知するのかを予約します。コンテンツの更新頻度と同程度がよいとされています。
(↓ で、「サイトマップを動的に生成」という項目があり、サイトの更新ことにサイトマップを更新させることもできるので、そちらを選択している場合、予約は特には必要ない気がします。)

サイトマップインデックスを有効化
サイトマップインデックスは、サイトマップが多数ある場合、分割する仕組みです。1,000 URL 以上のサイトマップの場合、サイトマップインデックスを利用することが推奨されています。

サイトマップページあたりの最大投稿数
最高で 50,000 まで指定できますが、デフォルトでは 1,000 で、↑ のサイトマップインデックスと組み合わせて利用するようになっています。

投稿タイプ
サイトマップ内に表示する投稿タイプを選択します。デフォルトでは全てにチェックが入っています。

タクソノミー
タクソノミーとは、投稿データをグループ分けするための「分類」のことです。どのような分類を、サイトマップに含めるか選択します。デフォルトでは全てにチェックが入っています。

日別アーカイブページを含める / 投稿者ページを含める
この項目はデフォルトでチェックが入っていません。オフィシャルの英語の説明を読むと、投稿や固定ページをクロールされるだけで、日別アーカイブや投稿者ページを検索エンジンは十分認知でき、ここで敢えてサイトマップに含めることで、Google に「重複」とみなされる恐れがあるとのことです。それでも、それなりに意図があるなら、チェックを入れましょう。

画像を除外
デフォルトでは、画像は含まれますが、サイトマップに画像を含めたくない場合、チェックを入れます。

サイトマップを動的に生成
サイトを更新する度に、自動的に新しいサイトマップを生成します。デフォルトではチェックが入っています。

追加ページ

WordPress で作ったサイトは、全て自動でサイトマップに含まれますが、それ以外はここで手動で登録します。
ページ URL は絶対 URL を記入します。
ページ優先度 ですが、% ではなくて、0.1 ~ 1.0 となっていますね。0.1 が 10%、1.0 が 100% となります。↑ のサイトマップのステータスで、他のページが何 % なのかを確認して、参考に決めるのがよいかと思います。

除外項目

除外単語 では、サイトマップから除外したいカテゴリー、タグ、またはカスタム分類が、ドロップダウンメニューの中から選べます。
除外ページ では、サイトマップから除外したい固定ページを指定できます。(投稿ページではない。)固定ページスラッグまたは固定ページ ID を、複数ある場合はカンマで区切って記入します。

優先順位

優先順位とは、クロールの優先順位です。重要なページほどクロールしてほしいですね。
サイトマップステータスを見ると、初期状態では、更新頻度などを元に優先順位が % で表示されています。これを手動で変更することができます。% ではなくて、0.1 ~ 1.0 となっていますね。0.1 が 10%、1.0 が 100% となります。
% が高いほど優先順位が上ということになりますが、Google は、この優先順位を無視するらしいですね・・・。これを参考にする検索エンジンもあるので、きちんと指定はしておいた方がいいですね。

頻度

サイトマップステータスを見ると、初期状態では、実際の更新頻度に合わせた値が入っていますが、これを手動で変更できます。適切な更新頻度を指定することで、クロールを効率よくさせます。

ソーシャルメディア

OGP(SNS上でウェブページの内容を伝えるための情報)を設定します。
Facebook と Twitter については、特に細かく設定できます。

ここで設定したことで、WordPress の投稿が、Facebook や Twitter に自動リンクされる訳ではありません。
WordPress の投稿や固定ページののリンクを、Facebook や Twitter に投稿した際、どのように表示されるのか、というのを設定するということです。
Facebook なら、こんな風 ↓ に表示されます。(All in One SEO Pack のオフィシャルページにあった例です。)
画像やタイトル、ディスクリプションなどを設定できます。

機能設定より「ソーシャルメディア」を有効化させると、それぞれの投稿、固定ページの一番下、All in One SEO Pack の欄に「ソーシャル設定」というタブが表示されるようになります。

ホームページ設定

SNS に、WordPress でのサイトのホームページのリンクを投稿した場合、どのように表示させるか、という設定です。

AIOSEO の Title と Description を使用する にチェックを入れると、All in One Seo Pack の「一般設定」→「ホームページ設定」で設定したタイトルとディスクリプションがそのまま使われます。SNS 用に別に設定したい場合は、チェックを入れず、下の欄に記入します。
ホームタイトル は95文字まで。
ホームのディスクリプション は200文字まで。
ホーム画像 は、最低 600 × 315 ピクセルとなっていますが、Facebook では、1200 × 630 ピクセル以上が推奨されています。5MB 以内です。大きければ圧縮をかけましょう。(以前圧縮できるサイトを紹介しました。→ ウェブ画像の最適化

画像設定

ホームページ以外、投稿や固定ページのリンクを SNS に投稿する際、どの画像を表示させるかを設定します。この設定は、各編集ページでも設定できますが、デフォルトでどのようにするか、というのを設定します。

OG:Image ソースを選択 で、どこの画像を使用するかを設定できます。
「デフォルト画像」を選んだ場合、この欄の下でデフォルト画像を設定します。
画像の大きさは、600 × 315 ピクセル以上ですが、Facebook は、1200 × 630 以上を推奨しています。5MB 以内です。大きければ圧縮をかけましょう。

Facebook 設定

Facebook 管理者 ID
ID の取得方法
① Facebook のプロフィールページで、適当にどこでも空いているところを右クリック →「ページのソースを表示」をクリック。もしくは、「Ctrl + U」でソースを表示させる。
② ブラウザの検索機能で、「 fb://profile/ 」という文字列を探す。それに続く数字が Facebook ID。
例:fb://profile/100000000000001
③ 数字をコピーして、All in One SEO Pack の Facebook 管理者 ID の欄にペースト

Facebook App ID
Facebook App ID を利用している場合、登録時に生成されたユニークアプリ ID を記入。

記事のタグを自動生成する
これはハッシュタグのことですね。Facebook で投稿する際、ハッシュタグ+キーワードという形で投稿できますが、この欄にチェックを入れると、そのタグを自動生成するための項目が3つ表示されます。
「記事のタグにキーワードを使用」→ 記事においてメタ・キーワードを設定している場合、それがFacebook のハッシュタグとして使われます。
「記事のタグにカテゴリーを使用」→ カテゴリー名が、Facebook のハッシュタグとなります。
「記事タグで投稿タグを使用」→ 投稿のタグ名が、Facebook のハッシュタグになります。

投稿タイプの Facebook メタを有効にする
Facebook において、OGP(Facebook にウェブページの内容を伝えるための情報)を行う投稿タイプを選びます。
普通は、「投稿」と「固定ページ」でよいと思います。
他の投稿タイプについては、All in One SEO Pack その1 一般設定の「コンテンツタイプ設定」でまとめましたので、そちらをご参照ください。

Facebook Publisher の記事を表示
Facebook ページ(企業などが情報を発信するページ)で、WordPress のサイトのリンクを投稿したい場合、ここにそのページの URL を書き込みます。

記事に Facebook の著者を表示
チェックをすると、WordPress のメニューより「ユーザー」→「あなたのプロフィール」→「All in One SEO Pack」のすぐ下あたりの「Facebook」(チェックを入れないとこの項目は表示されない)で選択した名前が表示されます。

投稿 オブジェクト型 / 固定ページ オブジェクト型
記事の内容を最もよく表しているものを、デフォルトとして選びます。

Twitter 設定

デフォルト Twitter カード
Twitter カードとは、ツイートに貼り付けられる記事へのリンクの見せ方のことです。
「要約」→ タイトル、ディスクリプション、ドメイン
「要約の大きい画像」→ 画像、タイトル、ディスクリプション、ドメイン

Twitter サイト
Twitter のユーザー名を記入します。@ マークから始まるあれです。@ も含めて記入します。

Twitter 投稿者を表示
チェックをすると、WordPress のメニューより「ユーザー」→「あなたのプロフィール」→「All in One SEO Pack」のすぐ下あたりの「Twitter」(チェックを入れないとこの項目は表示されない)で選択した名前が表示されます。

Twitter ドメイン
WordPress のサイトのドメインを、http:// を抜かして記入します。例えばこのサイトなら、hazu.jp となります。Twitter カードに表示されます。

Robots.txt

検索エンジンのクローラーにサイトのページへのアクセスを禁止・許可を設定します。

ユーザーエージェント
アクセスの禁止・許可を指示する検索エンジンを選びます。→ 検索エンジン一覧 全ての検索エンジンを選択する場合は、「*」(アスタリスク)を入力します。

ルール
「許可」もしくは「許可しない」を選択します。

ディレクトリ
クローラーのアクセスを禁止・許可する、ディレクトリやファイルへの有効なパスを入力します。例: /wp-admin/ など。

上記を入力の上、「ルールを追加」をクリックすると、下のルール欄に追加されます。

ファイルエディター

.htaccess を直接編集できます。ファイルをアップロードする手間は省けますね。
.htaccess とは何なのか、以前まとめました。よろしければ、ご参照ください。→ 【.htaccess】設定ファイルで出来ること

インポーター&エクスポーター

All in One SEO Pack の設定を、バックアップしたり、他の WordPress のサイトで利用したりするときに、便利な機能です。

インポート
前にエクスポートしたものがあるなら、それをインポートできます。

設定のエクスポート
「一般設定」→ All in One SEO Pack の「一般設定」に入力した内容のエクスポート(有効化されている機能管理設定も)
「投稿データ」→「投稿」や「固定ページ」など、それぞれのページに入力した All in One SEO Pack の内容のエクスポート

投稿タイプをエクスポートする
↑ の「設定のエクスポート」で「投稿データ」を選んだ場合、どのタイプの投稿データをエクスポートしたいのか選びます。

悪意あるボットのブロッカー

ボットとは、自動化されたタスクを実行するアプリケーションソフトウェアのことです。悪意のあるボットをブロックする機能です。

HTTP を利用した悪質なボットをブロック
サイトへアクセスを集中させ「503エラー」(Service Unavailable というエラーメッセージが表示される)を引き起こすことが目的のボットをブロックします。チェックを入れた方がいいです。

HTTP を利用したリファラスパムをブロック
リファラスパムとは、アクセス元を確認しようとする人をスパムサイトへ誘導するスパムです。チェックを入れた方がいいです。

ブロックされたボットを追跡
ブロックされたボットのログを確認できる機能で、個別に確認した人はチェックを入れます。

カスタムブロックリストを使用
ネット世界でスパムボットと認識されているけれど、まだブロックされたログにない場合、ブロックリストに追加することができます。

パフォーマンス

これはデフォルトで有効化されている機能ですね。

パフォーマンス

メモリ上限を上げる
PHP のメモリ制限ですが、普通はデフォルトの 256MB で問題ありません。サイトに「PHP Fatal error: Allowed memory size of 268435456 bytes exhausted」と表示されるようなときは、「wp-config.php」に「define( ‘WP_MAX_MEMORY_LIMIT’, ‘512M’ );」と書き換えます。

実行時間を延長する
PHP スクリプトの実行時間です。デフォルトの「システム標準を使う」で問題ありませんが、実行時間に問題がある場合、調整します。

強制的にリライトする
テーマや他のプラグインによるタイトルタグの書き換えが発生してしまう場合、この設定を有効化し、確実にタイトルが書き換えられるようにします。

システム状況

現在のシステム状況が確認できます。
「デバック情報をメールで送信する」にメールアドレスを入力して、送信することができます。

【WordPress プラグイン】All in One SEO Pack その1 一般設定

all in one seo pack logo

SEO (ウェブサイト最適化) ・・・サイトを運営するなら知らなくちゃいけないことですよね。SEO について、私はほとんど知識がないのですが、基本的に行われていることぐらい出来るようになろうと、ゼロから勉強していきたいと思います。

WordPress には、SEO 効果が含まれるテーマなんかもありますね。それから様々なプラグインも。今回は、利用者の非常に多いプラグイン「All in One SEO Pack」の設定を一つ一つ確認することで、そこで何が行われているのか理解したいと思います。
All in One SEO Pack 公式ページ

All in One SEO Pack を2回に分けてまとめます。
その1 一般設定 ← 今回
その2 機能設定


新規プラグインから All in One SEO Pack をインストール、有効化すると、左のメニューに表示されます。

デフォルトでは「一般設定」「パフォーマンス」「機能管理」というサブメニューが出ますが、今回は、「一般設定」を確認していきます。

「一般設定」の中の項目を一つずつみていきます。

一般設定

カノニカル URL

URL の正規化です。重複、類似のフェブサイトがある場合、検索エンジンは独自性の低いコンテンツとして評価し、リンクポピュラリティーが下がってしまう恐れがあります。なので、それらのページを優先させる URL にまとめる仕組みです。

一般的に、このような場合に利用します。
1. EC サイトなどで、色違いなど、URL の異なる類似商品ページが複数ある場合
2. PC とモバイルで、内容が同じだけど URL の異なるページがある場合
3. テストページとして、内容がほとんど同じだけど URL の異なるページがある場合
4. AMP HTML (モバイル用高速化ページ)が実装されている場合

この項目にチェックをいれると、カノニカル URL が自動的に生成されます。

Canonical URL をページ送りしない

↓ のように、コンテンツを複数のページ分けて、ページネーション(ページ分け)が設置されている場合がありますね。

あるページに置いて、カノニカル URL に指定されたページが、例えば http://example.com だったとします。このページに、ページネーションが設置されている場合、1ページ目は http://example.com だけど、2ページ目は http://example.com/page/2/ と表示されることが考えられます。
この項目にチェックをいれると、カノニカル URL に指定されたページにページネーションがある場合、2ページ目以降の URL はカノニカル URL に含まれません

デフォルトのタイトルを利用する

All in One SEO Pack では、ここの設定画面や、各投稿やページ画面において、タイトルとディスクリプション(ページの説明)を設置していくのですが、すでに他のプラグインや SEO 機能のあるテーマなどで、タイトルを設置している場合、競合してしまいます。

「有効」→ 他のプラグイン等(デフォルト)でのタイトルを優先
「無効」→ All in One SEO Pack でタイトルを設置

重要なイベントを記録する

チェックをすると、重要なイベントのログ(重要なイベントとは何を意味するのか分かりませんが・・・)が作成されます。wp-content ディレクトリの中に、all-in-one-seo-pack.log というファイルが作られるようです。書き込みができるよう、このディレクトリの権限を変更しておきます。All in One Seo Pack のプレミアムサポート(有料)を受ける場合、ログが必要なようです。

ホームページ設定

検索エンジンでの表示結果はこんな風ですよね。

All in One SEO Pack では、このタイトルとディスクリプション(説明)を設定できます。この一般設定の画面では、ホームページに対しての設定を行います。投稿ページ、固定ページ毎の設定は、それぞれの編集画面の下に記入欄が表示されるので、そちらで行います。

ホームタイトル

サイト名を記入します。これは、検索エンジンの結果の表示のタイトルとなります。また、ブラウザでサイトを表示した際、上のタブの部分にも表示される文字列となります。簡潔(最大60文字)で適切であることが重要です。

ホームのディスクリプション
サイトの説明を記入します。ここにキーワードを含めた方がいいみたいですが、キーワードの羅列ではなく、簡潔(最大160文字)で適切な文章であることが重要です。

固定フロントページを代用

「有効」→ 固定ページをホームページに設定していて(左のメニューバー「設定」→「表示設定」→「ホームページの表示」→「固定ページ」)、そちらで設定したホームタイトルとディスクリプションを利用したい場合
「無効」→ こちらの設定で、ホームページのタイトルとディスクリプションを設定する場合

タイトル設定

検索結果に表示されるタイトルが、条件別に設定できます。

例えば「投稿タイトルのフォーマット」を見ると、デフォルトで「%post_title% | %site_title%」となっていますね。
このブログのこの投稿を例とするなら、こうなります。
post_title → 「【WordPress プラグイン】All in One SEO Pack 」
site_title → 「 Hazu Labo 」
表示タイトル → 「【WordPress プラグイン】All in One SEO Pack | Hazu Labo 」

post_title は、各投稿ページで変更もできます。

コンテンツタイプ設定

SEO を行うコンテンツタイプを選びます。
一般的には、「投稿」、「固定ページ」をチェックすればいいと思います。
この2項目は、チェックを入れると、各投稿、固定ページの編集画面の下の方に、それぞれのページを個別に SEO の値を設置するための記入枠が表示されます。

どうやらここの項目は、他のプラグインの利用状況で異なるようです。私の場合、「 Simple Custom CSS & JS 」というプラグインを利用しているのですが、それに伴って、「 Custom Code 」という項目が追加されています。

他の項目は、↓ のようなコンテンツを意味しています。SEO を行うなら、チェックを入れます。
ただし、これらにチェックを入れると、それぞれが個別に検索結果として表示されることになるので、注意しなくてはいけません。

「メディア・添付ファイル」→ 画像など
「 oEmbed Response 」→ 動画などの埋め込み
「 ユーザリクエスト 」→ 投稿タイプが user_request のコンテンツ(フォームや認証など)
「 ブロック 」→ 投稿タイプが wp_block のコンテンツ。ブロックエディター (Gutenberg) で、再利用可能ブロックに登録されている内容

これらの項目にチェックを入れると、追加で、それぞれの項目のタイトル設定の記入欄が追加されます。デフォルトを変更したければ、記入します。

表示設定

デフォルトでは、「投稿」、「固定ページ」にチェックが入っています。
ここでチェックをいれると、↓ のように「投稿一覧」、「固定ページ一覧」に、各ページで行った SEO の設定内容が表示されます。

私はまだ何も設定していないので、「いいえ」と表示されていますね。
一覧画面の右上「表示オプション」をクリックして、表示項目を選べます。

ウェブマスター認証

分析ツールを利用する場合、それぞれの確認コード入力し、所有権確認が行えます。
「 Google Search Console 」なら、ここに確認用のメタタグを入力します。
WordPress での Google Search Console の所有権確認について

Google アナリティクス

Google のウェブサイト解析ツール、アナリティクスを利用している場合は、ここで設定します。
登録はこちらから ⇒ Google アナリティクス登録ページ

Google アナリティクスを利用したことない方は、Google の提供する無料の「アナリティクス アカデミー」というコースがお勧めです。最短でアナリティクスの使い方が学べると思います。私も利用してみました。⇒ Google アナリティクス アカデミー で学ぶ

Google アナリティクス ID
普通、Google アナリティクスを利用するには、解析したい各ページの head タグの開始直後に、トラッキングコードを記述しなくてはいけないのですが、All in One SEO Pack のこの欄に、Google アナリティクスのトラッキング ID を登録することで、SEO を行うサイト内のすべてのページに、自動的にトラッキングコードを実装できます。

Google アナリティクスのトラッキング ID の確認方法
アカウントログイン後、[管理] タブ > [トラッキング情報] > [トラッキング ID]

高度な分析オプション
「有効」を選択すると、その下に詳細の設定が表示されます。

ドメインのトラッキング
クッキー ドメインの設定を変更したい場合、ここに書き込みます。
ドメインと Cookie について
デフォルトでは auto になっています。特に指定がなければ、空白で大丈夫です。

マルチドメインの追跡
複数のドメイン(サイト)をまとめたデータにしたい場合、チェックを入れます。

IPアドレスを匿名化する
サイトの訪問者の IP アドレスを匿名化したい場合、チェックを入れます。
当然、IP アドレスを利用した訪問者の地域情報などは収集できなくなります。

広告主のトラッキングを表示する
Google 広告を利用している場合、そちらのデータを、アナリティクスで利用したい際、チェックを入れます。
二つのサービスのデータを統合して検証するなどの場合、役立ちます。

トラッキングからユーザーを除外する
Google アナリティクスでは、サイトの訪問者の情報を収集しますが、サイトを運営している自分がサイトを訪れた場合、自分の情報も収集されてしまいます。自分が自分のページを 10 回、20 回見れば、その分 PV が加算されてしまいますね・・・。
ここでは、トラッキングから除外する人を指定できます。

WordPress のユーザーの権限ごとに、設定できます。それぞれのユーザーの権限は、WordPress の左のメニュー欄、「ユーザー」→「ユーザー一覧」の「権限グループ」という欄から確認できます。
Administrator: 管理者
Author: 投稿者
Contributor: 寄稿者
Web Designer: ウェブデザイナー
Editor: 編集者
Subscriber: 購読者

外部へのリンクを追跡する
サイト内には、外部リンクが貼られてていることが多いと思います。
自分のサイトの訪問者が、どの外部リンクをクリックすることでサイト外に出ていったのか、ということを追跡します。

Schema Settings

schema.org とは?
ウェブサイトでメタデータを構造化し、検索エンジンが自分のサイトの情報を、より理解できるようにするものです。
例えば、電話番号なら、私たちは目で見て、それは電話番号だろうと想像できますが、検索エンジンはそうはいかないので、一定の決まったフォーマットに沿って、データを構造化します。

構造化データについてまとめた記事です。
構造化データでリッチリザルトを実現する

All in One SEO Pack では、構造化データの細かな設定は出来ないのですが、ここに必要事項を記入して、マークアップを有効化しておくと、一般的によく利用されるものが、まとめてマークアップされます。シンタックスは、「JSON-LD」になります。

schema.org マークアップを使用
「有効」を選択すると、設定項目が表示されます。

サイトリンクの検索ボックスを表示する
チェックを入れると、Google の検索結果で自分のサイトが表示された際、ディスクリプションの下に、検索ボックスが表示されます。その検索ボックスでは、自分のサイト内の検索が行えます。

ソーシャルプロフィールのリンク
ソーシャルメディア(Facebook、Twitter、Instagram 等)を利用している場合、ここにその URL を書き込みます。
1行につき、URL 1つです。Google Knowledge Graph の情報源となります。

個人または組織
ウェブサイトが個人的なものなのか、組織的なものなのか、選択します。

組織名(組織を選択した場合)
組織名を記入します。

組織のロゴ(組織を選択した場合)
組織や企業のロゴを追加できます。画像は PNG、JPG、GIF いずれかのフォーマットで 112 x 112 px 以上のサイズのものに限ります。画像が選択されていない場合、テーマのカスタマイザー設定で利用されているロゴ(があればですが)が利用されることがあります。

電話番号(組織を選択した場合)
組織の代表電話番号を入力します。国コードやハイフンも含めます。例: 81-888-8888-8888

Type of contact(組織を選択した場合)
上で記入した電話番号の種類を選択します。

担当者の名前(個人を選択した場合)
「WordPress のユーザー名」か、「手動で入力」が選択できます。
「手動で入力」を選択すると、名前の記入欄、写真やアバターなどの画像の追加欄が表示されます。

Noindex 設定

noindex とは?
検索エンジンに、インデックスさせないための設定です。検索結果に表示されなくなります。
内容の薄いページがインデックスされると、サイト全体の評価が下がってしまう恐れがあるので、そのようなページは noindex とした方がいいです。
noindex にしても、クローラーの巡回自体は行われるので、発リンクがある場合、ページランクは渡されます。

nofollow とは?
クローラーに巡回させないための設定です。リンクに対してクローラーの巡回を禁止し、評価を引き渡しません。

NOINDEX をデフォルトにする
各投稿ページで、noindex にするかどうか選べるのですが、デフォルトでどうするのか、ということを選択します。
基本的には、特にチェックは必要ないと思います。

NOFOLLOW をデフォルトにする
各投稿ページで、nofollow にするかどうか選べるのですが、デフォルトでどうするのか、ということを選択します。
基本的には、特にチェックは必要ないと思います。

以下、「カテゴリー」「日付別アーカイブ」「投稿者アーカイブ」「タグアーカイブ」「検索ページ」「404ページ」「ページ/投稿のページ送り」「固定ページ/投稿のページ送り」、それぞれの項目に、noindex、nofollow を適用する場合、チェックするのですが、基本的には全てチェックしていいと思います。

詳細設定

ディスクリプションを自動生成する
投稿の抜粋がある場合それを、ない場合は最初の160文字がディスクリプションとして、自動的に生成されます。

ページ区切り付きページの説明を削除する
↓ のように、コンテンツを複数のページ分けて、ページネーション(ページ分け)が設置されている場合、2ページ目以降の説明文は検索エンジンに拾われなくなります。情報の重複を避けることができます。

長いディスクリプションを短縮しない
デフォルトでは、160 字までとなっています。
Google では、ディスクリプションは 160 字の文字制限があるので、どちらにしろ、160 字までしか表示されません。

投稿メタフィールドの保護を解除する
カスタムフィールド(自分で作ったページ)内や、WordPress Moble のようなアプリで、XMLRPC を利用する場合、チェックを入れます。

添付ファイルを親投稿へリダイレクトする
画像などの添付ファイルに対して、そのリンクから送付元のページに飛べるようにしたい場合、チェックを入れます。

固定ページを除外する
All in One SEO Pack の設定から除外したいページを、ここに記入します。
カンマで区切って入力します。
特になければ空欄のままでいいです。

投稿のヘッダーに追加する / 固定ページのヘッダーに追加する / フロントページのヘッダーに追加する
ここに記入したことが、全ての投稿ページ、または全ての固定ページ、またはフロントページのヘッダーに書き込まれます。
HTML のヘッダーに書き込めるものなら、なんでも大丈夫なようです。

キーワード設定

メタキーワードの設定を行うのですが、メタキーワードは Google は無視するらしいので、あまり意味が無いと言われていますね。
なので、基本的には「無効」でよいと思いますが、「有効」を選択すると、「コンテンツタイプ設定」で「SEO を行うコンテンツタイプ」で選んだ各編集ページで、キーワードを書き込む欄が表示されるようになります。


【PHP】2重ポスト、DoS 攻撃対策

PHP Logo

サイトの投稿欄、登録欄などに、form を利用した際、ユーザが入力内容を送信完了した後も、ブラウザにその内容が残ってしまい、もう一度送信をクリックして、2重ポストになってしまうことがあります。
更にこれが悪用されて、DoS 攻撃されてしまう、なんて恐れもあるわけで、対策必要ですね。

前回、PHP Mailer を利用したフォームの作成についてまとめたので、これを引き続き使って、メール送信フォームの場合を考えてみたいと思います。

やりたいこと

3段階でメールを送信するように作ります。

「form.php」 入力画面。「確認」ボタンで「check.php」へ。

↓ ↑

「check.php」 確認画面。「送信」ボタンで「submit.php」へ。「戻る」ボタンで「form.php」へ。

「submit.php」 完了画面。送信の成功、失敗を伝える。

このような流れなのですが、満たしたい条件は以下の通りです。

  1. 「form.php」で入力した内容は、送信完了まで維持。まだ送信完了していない状態なら「check.php」から「form.php」に戻っても、入力画面に初めに入力した内容が表示される。
  2. → 解決方法 セッションを利用

  3. 一度送信したら、入力内容はブラウザから消去させる。2重送信させない。
  4. → 解決方法 ワンタイムチケットを生成

1.は、PHP のセッション機能を利用すればいいわけですが、2.のワンタイムチケットの考え方について、次にまとめます。

ワンタイムチケット

1番目の「form.php」で、ランダムな文字列の $ticket を生成。
それを$_SESSION[‘ticket’] = $ticket でセッション関数に格納。
フォームの中で、<input type=”hidden”> で、$ticket を POST メソッドで送信。

という流れになるのですが、言葉より図の方が分かりやすい気がするので、図を作ってみました。

これを見ていただければ思うのですが、「submit.php」で送信終了後、ブラウザの「戻る」で「check.php」を表示した場合など、
$_POST[‘ticket’] 、 $_SESSION[‘ticket’] が存在しない、またはこの二つの値が一致しない場合、通常のこちらが期待する流れでないことが分かります。そのような状況で、初期化するなどするような仕組みに作ればよいことになります。

2重ポストできないフォーム作成

ページ例 → https://exp.hazu.jp/mail-form/form.php
(submit.php がないので、「送信」をクリックしてもメールは送れませんが、check.php までは見れます。)

form.php (入力画面)

<?php
// セッション開始
session_start();

// キャッシュしない
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

//文字コードをUTF-8にする
mb_internal_encoding('UTF-8');
header("Content-Type: text/html; charset=UTF-8");

// ワンタイムチケットを生成
$ticket = md5(uniqid(rand(), TRUE));

// ワンタイムチケットをセッション変数に格納
$_SESSION['ticket'] = $ticket;

// HTMLでのエスケープ処理をする関数
function h($string) {
  return htmlspecialchars($string, ENT_QUOTES);
}
?>

<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>メール送信フォーム</title>
  </head>
  <body>
    <h1>メール送信フォーム</h1>
    <form action="check.php" method="post">
      <div>氏名: <input type="text" name="name" id="name" value="<?php echo h(@$_SESSION['name']);?>"></div>
      <div>メールアドレス: <input type="text" name="to" id="to" value="<?php echo h(@$_SESSION['to']);?>"></div>
      <div>件名: <input type="text" name="subject" id="subject" value="<?php echo h(@$_SESSION['subject']);?>"></div>
      <div>本文: <br />
        <textarea name="message" id="message" cols="50" rows="10"><?php echo h(@$_SESSION['message']);?></textarea>
      </div>
      <input type="hidden" name="ticket" value="<?php echo h($ticket);?>" />
      <div><input type="button" onclick="submit();" value="入力内容を確認する"></div>
    </form>
  </body>
</html>

ちょっと説明足します。

16行目: ワンタイムチケットを生成しています。
$ticket = md5(uniqid(rand(), TRUE));
rand 関数は、ランダムな数桁の整数を生成します。uniqid 関数は、ランダムな13文字の文字列を生成します。この二つが合体して、同じチケットが生成される可能性はほぼゼロとなります。
さらに、md5 関数で、MD5ハッシュ値を計算して、変数に格納します。

19行目: ワンタイムチケットをセッション変数に格納しています。
このセッション関数は、submit.php でセッションが破棄されるまで、維持されることになります。

35~39行目: フォームの入力欄には、初期の状況では空、check.php から「戻る」ボタンで戻って表示された場合には、最初に入力した内容が表示されるようにします。input 要素ではvalue 属性に、textarea 要素では<textarea> と </textarea> の間に、セッション関数を表示させるようにしますが、初期値が空になるように、関数の前に @ を付けて Null を返せるようにしておきます。

41行目: 画面には表示されない状態で、$ticket を、次の check.php へ POST メソッドで受け渡します。

check.php (確認画面)

<?php
// セッションの開始
session_start();

// キャッシュしない
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

//文字コードをUTF-8にする
mb_internal_encoding('UTF-8');
header("Content-Type: text/html; charset=UTF-8");

// チケットを確認
if (isset($_POST['ticket'])  &&  isset($_SESSION['ticket'])) {
  $ticket = $_POST['ticket'];
  if ($ticket != $_SESSION['ticket']) {
   header('Location: form.php');
   exit();
  }
} else {
  header('Location: form.php');
  exit();
}

// HTMLでのエスケープ処理をする関数
function h($string) {
  return htmlspecialchars($string, ENT_QUOTES);
}

// 入力内容の取得・変数に格納
$name    = $_POST['name'];
$to      = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];

// 入力値をセッション変数に格納
$_SESSION["name"]    = $name;
$_SESSION["to"]      = $to;
$_SESSION["subject"] = $subject;
$_SESSION["message"] = $message;

?>

<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>メール送信フォーム</title>
  </head>
  <body>
    <h1>入力内容確認</h1>
    <form action="submit.php" method="post">
      <div>氏名: <?php echo h($name); ?></div>
      <div>メールアドレス: <?php echo h($to); ?></div>
      <div>件名: <?php echo h($subject); ?></div>
      <div>本文: <br />
        <?php echo h($message); ?></textarea>
      </div>
       <input type="hidden" name="ticket" value="<?php echo h($ticket);?>" />
      <div>
        <input type="button" onClick="history.back()" value="戻る" /> 
        <input type="button" onclick="submit();" value="送信" />
      </div>
    </form>
  </body>
</html>

16~25行目: ここで、POST メソッドで送られてきた ticket と、セッション変数に格納されている ticket を確認します。
$_POST[‘ticket’]、$_SESSION[‘ticket’] 、どちらか一方でもない場合 → 強制的に form.php に転送
$_POST[‘ticket’] と $_SESSION[‘ticket’] の値が一致しない場合 → 強制的に form.php に転送

22~42行目: 入力値は $_POST で取得し、それを更に、$_SESSION でセッション変数に格納し、submit.php にも、form.php に戻った場合にも持ち運べるようにします。

60行目: form.php と同じですが、画面には表示されない状態で、$ticket を、次の form.php へ POST メソッドで受け渡します。

submit.php (完了画面)

メール送信には PHP Mailer を使う前提で書いています。→ PHP Mailer を利用したフォームの作成

<?php
// セッションの開始
session_start();

// キャッシュしない
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

//文字コードをUTF-8にする
mb_internal_encoding('UTF-8');
header("Content-Type: text/html; charset=UTF-8");

// メール日本語対応
mb_language("japanese");

// チケットを確認
if (isset($_POST['ticket'])  &&  isset($_SESSION['ticket'])) {
  $ticket = $_POST['ticket'];
  if ($ticket !== $_SESSION['ticket']) {
    echo '<html>有効期限切れ <a href="form.php" title="ホーム">入力画面へ戻る</a></html>';
    exit();
  }
} else {
    echo '<html>有効期限切れ <a href="form.php" title="ホーム">入力画面へ戻る</a></html>';
    exit();
}

// HTMLでのエスケープ処理をする関数
function h($string) {
  return htmlspecialchars($string, ENT_QUOTES);
}

// 変数にセッション変数を代入
$name    = $_SESSION['name'];
$to      = $_SESSION['to'];
$subject = $_SESSION['subject'];
$message = $_SESSION['message'];

// PHPMailer クラスをネーム空間にインポート
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Composer の autoloader をロード
require 'vendor/autoload.php';

// インスタンス生成
$mail = new PHPMailer(true);

try {
    //Server settings
    $mail->isSMTP();                             // SMTP 利用
    $mail->Host       = 'smtp.gmail.com';        // SMTP サーバー(Gmail の場合これ)
    $mail->SMTPAuth   = true;                    // SMTP認証を有効にする
    $mail->Username   = 'nana.rome@gmail.com';   // ユーザ名 (Gmail ならメールアドレス)
    $mail->Password   = 'gvrvkkcewyspzffl';      // パスワード
    $mail->SMTPSecure = 'tls';                   // 暗号化通信 (Gmail では使えます)
    $mail->Port       = 587;                     // TCP ポート (TLS の場合 587)

    // メール本体
    $mail->setFrom('nana.rome@gmail.com', 'hazuki');  // 送信元メールアドレスと名前
    $mail->addAddress($to, mb_encode_mimeheader($name, 'ISO-2022-JP')); // 送信先メールアドレスと名前
    $mail->Subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');  // 件名
    $mail->Body    = mb_convert_encoding($message, "UTF-8","AUTO");  // 本文

    // 送信
    $mail->send();
    echo '送信済み';

    // セッション変数を破棄
    $_SESSION = array();
    session_destroy();

} catch (Exception $e) {
    echo "送信失敗: {$mail->ErrorInfo}";
}
?>

19~28行目: check.php と同じですが、ここで、POST メソッドで送られてきた ticket と、セッション変数に格納されている ticket を確認します。
$_POST[‘ticket’]、$_SESSION[‘ticket’] 、どちらか一方でもない場合 → form.php へ誘導
$_POST[‘ticket’] と $_SESSION[‘ticket’] の値が一致しない場合 → form.php へ誘導

73, 74行目: メール送信が完了したら、セッションを破棄します。

【PHPライブラリ】PHP Mailer

PHP Logo

PHP でメールを送るには、mail 関数とか、mb_send_mail 関数とかありますが、これで送信すると、スパム扱いされることもあるし、付加機能を付けるのも大変なんですよね。
メール送信用のPHP ライブラリ、「PHP Mailer」は、外部の SMTP サーバーを利用(経由)してメールを送信できるので、このような問題が解決でき、設定も簡単です!
公式ページ → https://github.com/PHPMailer/PHPMailer

PHP Mailer のインストールには、Composer の利用が推奨されています。
PHP のインストールから、Composer の利用の仕方まで、前回まとめました。
PHP 開発ローカル環境構築

Composer を利用、SMTP サーバーは Gmail を利用する仮定でまとめます。

目次
・ Composer で PHP Mailer をインストール
・ 送信フォーム作成
・ Gmail の2段階承認利用時のパスワード

Composer で PHP Mailer をインストール

任意のディレクトリ(どこでも大丈夫です。名前もなんでも)に、「composer.json」という名前のファイルをテキストエディターで作ります。composer.json には、以下のコードを書き込みます。(PHP Mailer の公式マニュアル通りです。)

{
    "require": {
        "phpmailer/phpmailer": "~6.1"
    }
}

コマンドプロンプトを立ち上げ(ここでは、どこに Comproser を置いたかにもよりますが、コマンドプロンプトに「管理者」で入らないと、権限エラーになることもあります。)、Composer のインストールされているディレクトリ(PHP のインストールされているディレクトリ)で、「composer require phpmailer/phpmailer」とコマンドを入力し、実行します。このように表示されます。(ファイルがインストールされるまで、少し時間がかかるかもしれません。)

PHP (XAMPP) のあるディレクトリの中に、「vendor」、「composer.json」、「composer.lock」があるのを確認。

「vendor」をディレクトリごと、PHP Mailer を利用したい PHP ファイルのあるディレクトリの中に移動させます。

送信フォーム作成

まず、簡単なメールフォームを作ってみます。

<mail.html>

<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>メール送信フォーム</title>
  </head>
  <body>
    <h1>メール送信フォーム</h1>
    <form action="submit.php" method="post">
      <div>氏名: <input type="text" name="name" id="name"></div>
      <div>メールアドレス: <input type="text" name="to" id="to"></div>
      <div>件名: <input type="text" name="subject" id="subject"></div>
      <div>本文: <br />
        <textarea name="message" id="message" cols="50" rows="10"></textarea>
      </div>
      <div><input type="submit" value="送信" /></div>
    </form>
  </body>
</html>

ページ例 → https://exp.hazu.jp/mail-form/mail.html
(submit.php がないので、「送信」をクリックしてもメールは送れませんが)

次に、PHP Mailer を利用した SMTP 送信の PHP ファイルを作ります。

<submit.php>

<?php
// 入力内容の取得・変数に格納
$name    = $_POST['name'];     // 氏名
$to      = $_POST['to'];       // メールアドレス
$subject = $_POST['subject'];  // 件名
$message = $_POST['message'];  // 本文

// メール日本語対応
mb_language("japanese");
mb_internal_encoding("UTF-8");

// PHPMailer クラスをネーム空間にインポート
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Composer の autoloader をロード
require 'vendor/autoload.php';

// インスタンス生成
$mail = new PHPMailer(true);

try {
    // SMTPの設定
    $mail->isSMTP();                       // SMTP 利用
    $mail->Host       = 'smtp.gmail.com';  // SMTP サーバー(Gmail の場合これ)
    $mail->SMTPAuth   = true;              // SMTP認証を有効にする
    $mail->Username   = 'XXXXX@gmail.com'; // ユーザ名 (Gmail ならメールアドレス)
    $mail->Password   = 'xxxxxxxxxx';      // パスワード
    $mail->SMTPSecure = 'tls';             // 暗号化通信 (Gmail では使えます)
    $mail->Port       = 587;               // TCP ポート (TLS の場合 587)

    // メール本体
    $mail->setFrom('XXXXX@gmail.com', 'hazuki');  // 送信元メールアドレスと名前
    $mail->addAddress($to, mb_encode_mimeheader($name, 'ISO-2022-JP'));  // 送信先メールアドレスと名前
    $mail->Subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');  // 件名
    $mail->Body    = mb_convert_encoding($message, "JIS","UTF-8");  // 本文

// 送信
    $mail->send();
    echo '送信済み';
} catch (Exception $e) {
    echo "送信失敗: {$mail->ErrorInfo}";
}
?>

これでいいんですが、ちょっと説明付け足します。

29行目: パスワードは、ここでは、Gmail(Google)の普通のログインパスワードになるんですが、もし2段階認証を利用している場合、PHP Mailer では、普通のパスワードでログインできません。これについて、詳しく後述します。

35、36行目: ヘッダー情報にそのまま日本語を書き込むと文字化けしてしまうことがあります。mb_encode_mimeheader 関数を使って、ヘッダーに使われる「ISO-2022-JP」にエンコーディングします。

37行目: 本文も同じく、文字化けに備えて、mb_convert_encoding 関数を使って、一応 JIS にエンコーディングします。

上手くいかない場合は、SMTP の設定あたりに、「$mailer->SMTPDebug = 2;」(詳細デバッグ)を加えて、デバックを取ってみてください。詳細がコメントアウトされるので、おかしなところが分かるかもしれません。

その他、Cc や Bcc、返信用アドレス、添付ファイル、HTML メールとテキストメールの切り替え等も含めることができますが、公式ページ(https://github.com/PHPMailer/PHPMailer)をご覧ください。

Gmail(Google)の2段階認証利用時のパスワード

Gmail(Google)で2段階認証を利用している場合、PHP Mailer の SMTP 設定では普通のログインパスワードだとログインエラーになります。それ専用のパスワードを生成する必要があります。手順は以下の通りです。

ブラウザで Gmail(Google)を開き、ログインした状態で、右上の自分のサムネイルをクリック。
ドロップダウンメニューの中の「アカウント」をクリック。


左のメニュー項目の「セキュリティ」をクリック。


「Google へのログイン」で、「2段階認証プロセス」が「オン」になっていることを確認の上、「アプリ パスワード」をクリック。


「アプリを選択」をクリック。
「その他(名前を入力)」の欄に、「PHP Mailer」など分かりやすい名前を付ける。
「生成」をクリック。


16桁のパスワードが生成されます。これを PHP Mailer を利用した PHP ファイルの SMTP の設定において利用します。

PHP 開発ローカル環境構築

PHP Logo

PHP Mailer (SMTP 送信のための PHP ライブラリ) についてまとめようと思ったのですが、公開されているサイト https://github.com/PHPMailer/PHPMailer を読んだら、今は Composer の利用が推奨されているんですね。
PHP ライブラリの利用などを書く前に、まずは PHP 開発でのローカル環境構築についてまとめてみます。

目次
・ そもそも PHP とは?
・ XAMPP で PHP をインストール
・ Composer インストールから使い方まで

そもそも PHP とは?

PHP は Web 開発に使われるサーバーサイドプログラミング言語です。Web によく使われるクライアントサイドの Java Scrip と比較するとこんな具合です。

<PHP>
サーバー側 (PHP を実行する):クライアントのリクエストにより、PHP ファイルから HTML ファイルなどを生成し送信
クライアント側 (PHP は関係ない) :サーバーにリクエストし、送られてきた HTML ファイルなどをブラウザに表示

<Java Script>
サーバー側 (Java Script を実行しない):Java Script をそのままユーザーに送信
クライアント側 (Java Script を実行する) :ブラウザで Java Script を実行して表示

そのプログラム言語が実行されるのが、サーバー側でなのか、クライアント側でなのかという違いですね。
Java Script は一般的なブラウザで実行できるので、開発する側はブラウザとテキストエディターさえあれば、ちゃちゃっと書いて確認できますが、PHP は、PHP を動かす環境が必要となります。レンタルサーバーでも、大概のところで PHP は利用できるので、サーバーにアップロードすれば、動作確認はできるのですが、オフラインでローカル(あなたの PC)で動作確認するには、PHP と関連システムをインストールする必要があります。

XAMPP で PHP をインストール

PHP を動かすためには、PHP そのもの以外にも、Apache だの Visual C++ だの、データベース呼び出すなら MySQL だの、色々必要なんですが、こういうのを全部ひっくるめてインストールできるのが「XAMPP」です。Perl も一緒にインストールしてくれます。便利ですね!

ダウンロードページ → XAMPP Apache + MariaDB + PHP + Perl

① ダウンロード後、exe ファイルを実行。アンチウィルスソフトに対する警告が出る場合もありますが、問題なければ「Yes」をクリック。
インストール画面が出だら、「Next」をクリック。
② インストールする項目を選択。「Next」をクリック。
 

③ インストールする場所を選ぶ。「Next」をクリック。
④ Bitnami は今は関係ないので、チェックを外す。「Next」をクリック。
 

⑤ 「Next」をクリックしてインストール開始
⑥ しばらくかかります。
 

⑦ インストール終了後、タスクバーにある XAMPP アイコンをクリック。
(タスクバーにアイコンがなければ、「インストールしたディレクトリ」→「XAMPP」→「xampp-control.exe」をクリック。)
コントロールパネルが開いたら、「Apache」と「MySQL」の Actions「Start」をクリック。
(Apache と MySQL は、時間がたったり、PC を落とすと Stop され、localhost に繋がらなくなることがあるので、その場合はまたコントロールパネルから Start させる必要があります。)

これで準備完了。
実行したい PHP ファイルは、「xampp」(インストールした場所)の中の「htdocs」の中に入れます。

ブラウザで「http://localhost」と入力すると、こう表示されます。

「htdocs」に入れた PHP を実行してブラウザで見るには、「http://localhost/ファイル名.php」と入力して表示させます。

Composer インストールから使い方まで

「Composer」は、PHP のプロジェクトが必要とするライブラリやパッケージを管理する「ライブラリ依存管理ツール」です。
これが便利なのは、例えば、A というライブラリを動かすには、B と C が必要で、C を動かすには D が必要で・・・というように、必要なライブラリが他の幾つもと関わり合っている場合、これを自分であちこちから持ってくるのは大変ですよね。Composer を利用すると、必要なパーツを簡単に集めてくれます。ただ、コマンドプロンプトを利用するので、コマンドプロンプトの基本の基本でもいいので、分かってなくちゃいけません。

ダウンロードページ → Composer – A Dependency Manager for PHP

① ダウンロード後、exe ファイルを実行。アンチウィルスソフトに対する警告が出る場合もありますが、問題なければ「Yes」をクリック。
インストール画面が出だら、「Next」をクリック。
② 利用する PHP を選びます。今回は、先ほど「XAMPP」をインストールしたので、それを選びます。「Next」をクリック。
 

③ プロキシサーバーを利用している場合は、ここで登録します。利用していない場合は、そのまま「Next」をクリック。
④ インストール内容を確認して、「Install」をクリック。
 

⑤ インストールが完了画面が出たら、「Finish」をクリックしてお終い。

インストール完了後、コマンドプロンプトを立ち上げ、インストールされているか確認します。
インストールしたディレクトリ(関連付けた PHP のあるディレクトリ)で、「composer -V」とコマンドを入力して実行。これはバージョンを見るためのコマンドです。

このように表示されれば、インストールされています。

Composer を利用するには、プロジェクトごとに任意のディレクトリ(どこでも大丈夫です。名前もなんでも)を作ります。その中に、「composer.json」という名前のファイルをテキストエディターで作って入れておきます。composer.json には、以下のコードを書き込みます。

{
    "require": {
        "phpmailer/phpmailer": "~6.1"
    }
}

“require” の中は、欲しいライブラリ名(パッケージ名)、及び、バージョン名を記述します。今回は、PHP Mailer が欲しいので、GitHub に公開されている公式のマニュアル通りにこう書きました。

あとは、コマンドプロンプトで実行するだけ。(ここでは、どこに Comproser を置いたかにもよりますが、コマンドプロンプトに「管理者」で入らないと、権限エラーになることもあります。)
Composer のインストールされているディレクトリで、「composer require phpmailer/phpmailer」とコマンドを入力し、実行します。このように表示されます。(ファイルがインストールされるまで、少し時間がかかるかもしれません。)

PHP (XAMPP) のあるディレクトリの中を覗いてみます。

「vendor」というディレクトリと、「composer.json」、「composer.lock」というファイルが出来ていますね。この「vendor」の中に、(今回の場合)PHP Mailer に必要なライブラリーやパッケージが全てインストールされています。

【WordPress】タグなどの自動整形機能の無効化・有効化

WordPress Logo

WordPress のコードエディターでは、改行タグを付けなくても、編集画面上で改行していれば <br /> タグが足されたり、自動で <p> タグを補ってくれたり、とても便利ですよね。
でも、こちらがわざわざ書き込んだものを勝手に消されたり、または勝手に付け加えられたり、何してくれてんだよー!なんて思うこともあります。便利な自動整形機能が邪魔に感じることも・・・。

この自動整形機能、function.php に remove_filter() 関数を書き込むことで取り除くことができます。
また、add_filter() 関数で追加も可能。
自動整形機能の関数は、wp-includes ファイルの中の formatting.php で定義されていますが、それぞれの関数の詳細は、こちらに一覧があります。
formatting.php の関数リスト(英語)

自動整形無効化(全ての投稿に適用)

remouve_filter($tag, $function_to_remove) という書き方ですが、変数の意味はこのようになります。
$tag = フィルターフック(除去したい関数が追加されている場所)
$function_to_remove = 除去したいコールバック関数

子テーマ(なければテーマ)の中の、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。

wpautop() 関数を無効化 (<p> タグ、 <br /> タグの自動挿入無効化)

remouve_filter('the_title', 'wpautop');  // タイトル蘭
remove_filter('the_content', 'wpautop');  // 本文欄
remove_filter('comment_text', 'wpautop');  // コメント欄
remove_filter('the_excerpt', 'wpautop');  // 抜粋欄

wptexturize() 関数を無効化 (記号などの自動変換)

remouve_filter('the_title', 'wptexturize');  // タイトル蘭
remove_filter('the_content', 'wptexturize');  // 本文欄
remove_filter('comment_text', 'wptexturize');  // コメント欄
remove_filter('the_excerpt', 'wptexturize');  // 抜粋欄

自動整形無効化(部分的に適用)

ブログなどの投稿ページ (single.php)には、デフォルトの自動整形を有効化したままにして、固定ページ(page.php)のみ、自動整形を無効化したい、という場合もあると思います。その場合、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。wpautop() 関数を、固定ページでのみ無効化する例です。

function disable_page_wpautop() {
	if ( is_page() ) remove_filter( 'the_content', 'wpautop' );
}
add_action( 'wp', 'disable_page_wpautop' );

2行目、「is_page()」の部分を変更させることで、他の部分に適用することができます。

自動整形有効化

逆に、無効化されている自動整形の関数を有効化させるには、add_filter() 関数を利用します。
add_filter($tag, $function_to_remove)
$tag = フィルターフック(追加したい関数が追加されている場所)
$function_to_remove = 追加したいコールバック関数

make_clickable() 関数(プレーンテキストURIをHTMLリンクに変換)を有効化する例です。
(デフォルトでは、テキストエディターでの編集では、この関数は無効化されているようです。)
子テーマ(なければテーマ)の中の、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。

add_filter('the_content', 'make_clickable');  // 本文欄
add_filter('comment_text', 'make_clickable');  // コメント欄
add_filter('the_excerpt', 'make_clickable');  // 抜粋欄

以上、なんですが、一つ、分からないことがあります。

Gutenberg のテキストエディターで、<a> 要素に、<div> 要素を入れ子にすると(文法的には合っていますよね)、前後に、自動で空の <a> 要素が生成されてしまうのです。同じことを Classic エディターで行うと、そんな自動整形は行われません。これを取り除くべく、formatting.php と睨めっこして、どの関数がこのような振る舞いをしているのか突き止めようとしましたが、分かりませんでした。お手上げです。Gutenberg 特有の機能なんでしょうかね。ご存じの方、おりましたら教えてください。Classic エディターで編集することで解決はするのですが、どこの振る舞いか分からなかったのが、気持ち悪いです。検索しましたが、the_content のフィルターフックでこれを実現するには、自分で関数を作って追加する、なんていう方法もありました。でも、元の関数がどこにあるのか、知りたいです。