内部リンクを一括変更するのに Search Regex が便利


入力作業

WordPressで自分のブログを運用しているライターのEXPわくいです。
昨年11月にサイトをリニューアルしてから、コンテンツSEOに力を入れつつ、記事作成に取り組んでいます。

さて、SEOでは内部リンク(サイト内のページ同士のリンク)を変更・調整することがあります。
個別の調整であればWordPressの編集画面を開いて手動で対応しますが、多くのページで同じ文字列やコードを書き換える場合、面倒ですし時間もかかります。
そのような場合、Search Regex プラグインを用いると、リンクテキストやHTMLの記述を一括して短時間で変更可能です。

ここでは、Search Regex によるテキストの検索と置換について、簡単にやり方を書いておきます。
便利ですので、使ったことがない方は試してみてはいかがでしょうか。

目次

内部リンクを一括変更する必要がある場合

内部リンクを一括して変更するのは、次のようなケースが考えられます。

リライトで記事タイトルを変更したとき

ライターは「リライト」という作業を日常的に行います。リライトとは「書き直し」のことですが、一度公開した記事を見直して、より良い記事にする作業のことをいいます。
その際、タイトルも変更する場合がありますが、ほかの記事でそのタイトルを用いて内部リンクを張っている場合、リンクも編集しなければなりません。たとえば、

のように、タイトルをアンカーテキストにしてリンクを張っている場合です。
複数のページからリンクされている場合は、それらすべてのアンカーテキストを変更する必要があります。

アンカータグの属性を変更したいとき

SEOやUX(ユーザー体験)の観点から、リンクに使用するアンカータグ(<a>)の属性を変更したい場合があります。属性とは、href や target、rel などのことです。それぞれの役割を簡単に表にまとめます。

属性役割
href属性リンク先URLを指定する
target属性リンク先文書の開き方を指定する。たとえば “_blank” を指定すると別のタブを開いて文書を表示する
指定しない場合は、その画面上でページが切り替わる
rel属性リンク先の文書との関係を示す
“nofollow” を設定すると検索エンジンはリンク先を評価しない。指定がなければ通常どおり評価する

target、rel属性には上記以外の設定値も存在します。

内部リンクに target=”_blank” を設定することはUX上の問題があるとされています。もし、設定されているケースがあれば削除したほうがよいでしょう。

サイトURLに変更が生じたとき

サイトのURLを変更した場合、そのままでは投稿に保存されている内部リンクは以前のURLのままになっているため、変更する必要があります。
URLに変更が生じるのは、次のような場合です。

  • SSL化してhttpがhttpsに変わった
  • ドメインを変更した
  • テスト環境のドメインが異なる(テスト環境との間でデータを移設する場合)
  • パーマリンク構造を変更した
  • カテゴリーのスラッグを変更した(URLにカテゴリースラッグが含まれる場合)

なおURLを変更した場合、検索エンジンからの評価を新しいURLに引き継ぐために、旧URLから新URLへのリダイレクト(301リダイレクト)が必要になります。リダイレクトを簡単に設定できるプラグインを利用すると便利です。

Search Regex による内部リンクの一括変更の事例

WordPressのSearch Regexプラグインは、John Godley氏が開発した文字列置換のための拡張機能です。
インストールして有効化すると、管理画面の「ツール」の下にSearch Regexメニューが追加されます。

初期状態とモード切り替え

Search Regexメニューをクリックすると、次のような画面が表示されます。

Search Regex 初期画面

初期状態は「シンプルモード」で、検索フィールドと置換フィールド、「検索」ボタンと「すべて置換」ボタンなどが表示されます。
「高度なモード」を選択すると、データベース上の置換を行う範囲を指定できたり、置換以外の処理を選択できたりします。

語句の一括変更

内部リンクのアンカーテキストを変更する例です。
たとえば、アンカーテキストとして「SEOに欠かせない内部リンクの効果的な張り方」という記事のタイトルが書かれているとします。
このリンク先の記事タイトルが変更になった場合、アンカーテキストも変更する必要があるでしょう。

  • 変更前:SEOに欠かせない内部リンクの効果的な張り方
  • 変更後:SEOに欠かせない内部リンクの効果的な張り方と事例を紹介!

Search Regexの検索フィールドに変更前の文字列、置換フィールドに変更後の文字列を入力します。

Search Regex 検索結果一覧

「検索」ボタンをクリックすると、検索フィールドに書かれた語句に一致する投稿の一覧と、その内容が表示されます。
本文内のオレンジ色のハイライト部分は、置換した後の状態を示しています。(置換フィールドが空白の場合は検索フィールドの文字列になります)

初期状態では投稿データを検索するため、一覧に表示される「投稿タイプ」は「投稿」や「固定ページ」などになっているはずです。(カスタム投稿タイプが設定されている場合はその名前)

一覧を確認して、ハイライト周辺が正しいことを確認しましょう。問題がなければ「すべて置換」をクリックすると置換処理が実行され、完了すると完了結果が一覧で表示されます。

なお、ハイライト部分をクリックすると、その部分だけを置換できます。

正規表現を使用したコードの一括変更

UXの観点から、内部リンクにはtarget属性は書かないほうがよく、外部サイトへのリンクにはtarget=”_blank”を設定するのがよいとされています。
たとえば、内部リンクにtarget属性を設定してしまっており、これらを一括で削除したい場合を考えてみましょう。

正規表現をチェック

Search Regexの画面を開き、検索フィールドの右側の選択肢で「正規表現」にチェックを入れます。その状態で検索フィールド、置換フィールドに次のような正規表現を入力します。(私のサイトの場合)

検索(<a\s+[^>]*href="https?://expwakui\.com[^>]*)\s+target="_blank"

置換$1

「検索」ボタンを押すと、次のように正規表現にマッチした投稿の一覧が表示され、該当箇所がハイライトされます。

この例のように、置換フィールドに $1 を入力している場合は、置換後の文字列がハイライトで表示されます。target属性の記述がない文字列です。

一覧を見て、ハイライト周辺が正しいかを確認しましょう。問題がなければ「すべて置換」をクリックすると、置換処理が実行されて結果が表示されます。

フィールドに入力する正規表現の意味

検索(<a\s+[^>]*href="https?://expwakui\.com[^>]*)\s+target="_blank"

置換$1

上記の検索フィールドに入力する正規表現は、target=”_blank” が記載されている内部リンクのアンカータグにマッチします。この場合は私のサイトの内部リンクを指しますので、ドメイン部分をご自身のものに書き換えてください。

正規表現の中の ( ) カッコ内はキャプチャグループと呼ばれ、この中身は後から変数で呼び出せます。カッコが1つだけの場合、変数 $1 に文字列が格納されます。カッコが複数ある場合、先頭から順に $1、$2、$3・・・のように順番に格納されます。

上記の場合、置換フィールドの$1には、target=”_blank” を除いた文字列が格納されています。この状態で置換処理を行うと、target属性を削除できるのです。

正規表現の詳しい中身については、Gemini に質問すると詳しく教えてくれます。私も今回のケースでは、Geminiに教えてもらいました。

置換処理の注意点

誤った置換処理をすると表示や動作の不具合が生じたり、再度修正することが困難になったりする恐れがありますので、文字列の入力やモードの選択は慎重に行ってください。念のため、処理を行う前にデータベースのバックアップを実施してください。

文字列を入力したら、必ず先に「検索」ボタンをクリックして、処理の状況を確認してください。置換しても問題ないと判断した場合のみ、「すべて置換」ボタンをクリックしましょう。
また、個別にマッチした部分だけを置換したい場合は、ハイライトした文字列をクリックするとその部分だけが置換されます。

Search Regexの詳しい使い方を知るには、公式のマニュアルやエンジニアが解説する記事を参考にするとよいでしょう。

文字列置換をする他の方法と注意点

投稿内の文字列を変更する方法は、Search Regexのようなプラグインを使う以外にも存在します。
次のような方法です。

  • データベースコマンドを使用して変更する
  • WP-CLIコマンドを使用して変更する

ただし、データベースコマンドを使用する方法は、以下に説明するシリアライズの仕組みによって、正しく置換が行われない場合があるため、お勧めできません。

一方、WP-CLIのsearch-replaceコマンドを使用する方法は、Search Regexと同様の置換処理が可能です。ただ、コマンドラインツールからSSHなどの方法でサーバーに接続し、WP-CLIをインストールして使用する必要があります。

シリアライズの仕組み

WordPressがデータベース内に保存するのは、単純な文字列だけではありません。配列やオブジェクトのデータも同時に保存します。データベースには配列などの構造データをそのまま保存する仕組みがないため、WordPressがそれらのデータを単純な文字列に変換して保存する「シリアライズ」という処理を実行します。

シリアライズされたデータには、文字の種類や文字数などの情報も追加して保存されるため、単純に中身のデータだけを置換した場合、種類や文字数の情報が実際のデータと一致しません。これらを取り出して配列などのデータに変換する際にはエラーを引き起こします。

本文データの扱い

MySQLデータベースで投稿本文のデータが格納されるのは、wp_posts テーブルの post_content フィールドですが、この中身は基本的にシリアライズされないため、内部リンクのような本文データの置換では問題にならない場合もあります。
ただし、ブロックテーマではこの中身をシリアライズするケースがあるため、注意が必要です。

まとめ

WordPressサイトで内部リンクを一括変更するのに Search Regex は非常に便利です。管理画面上で検索文字列と置換文字列を入力するだけで、簡単に変更できます。

事前に「検索」ボタンをクリックしてマッチする内容を一覧で確認できるうえ、マッチした文字列のハイライト部分をクリックすることで個別の変更も可能です。正規表現にも対応しており、複雑なマッチパターンでも柔軟に対応できます。

記事のリライト時や、SEO施策を実施した際の内部リンクの一括変更に、Search Regexを使用すると作業を大幅に効率化できます。

関連記事

SEOに欠かせない内部リンクの効果的な張り方

この記事をシェアする: