AccessでWordPressのリダイレクトチェーンを検出する方法

AccessでWordPressのリダイレクトチェーンを検出する方法 - アイキャッチ画像

WordPressで幾度もカテゴリーや記事のスラッグを変更していると、知らず知らずのうちに“リダイレクトチェーン(多段階転送)”が発生してしまうことがあります。

これがSEOや表示速度に悪影響を与える可能性も…。今回は、そのリダイレクトチェーンを洗い出す簡単なツールをMicrosoft Accessで自作したので、その作り方を紹介します!

目次

ツールの概要

このツールは、WordPressのプラグイン「Redirection」からCSV形式でエクスポートした転送ルールをもとに、簡単なクエリでリダイレクトチェーンを検出します。

テーブルの作成やデータの取り込みはウィザード任せなので、ほぼマウス操作だけで完成します。作成するクエリも2つだけで、知っておくと役立つテクニックも紹介した、Access初学者の方にもやさしい内容となっています。

EIICHI

Redirectionのエクスポート機能の仕様により、作成するツールは、位置情報(Position)による転送ルールの優先順位付けや、正規表現には対応していません。

転送ルールのエクスポート(Redirection側)

先ず最初に、Redirectionの転送ルールをCSV形式でエクスポートします。エクスポートは、「インポート/エクスポート」タブから実行できます。

  1. 「すべて」のままでOK。詳細は以下のペンマークを参照。
  2. 「エクスポート」から「WordPress リダイレクト」「CSV」を選択
  3. [ダウンロード]ボタンをクリック

出力対象は常にRedirectionが管理している転送ルールのみであり、この選択肢は出力後の用途を意味しています。したがって「Apacheリダイレクト」を選択した場合は、出力形式は「Apache .htaccess」にする必要があります。
仮に「CSV」を選択すると、そのような組み合わせは意味が無いので出力は空になります。

[表示]ボタンをクリックすると、エクスポートの内容を確認することができます。
このCSVファイルは、先頭行にタイトルを持ち、フィールドはコンマ(,)で区切られ、各値はダブルクォーテーションで囲まれていることが分かります。これら仕様は、このあとのAccessのインポート定義に使用します。

CSVファイルのフィールド一覧
項目名説明
sourceリダイレクト元のURLパスです。例えば /old-page のように、リダイレクトの元になるURLのパス部分を指定します。ドメイン部分は含まれません。
target**リダイレクト先のURL(ターゲット)**です。完全なURLまたは相対パスを指定できます。例: /new-pagehttps://example.com/new-page など。
regex正規表現を使用するかどうかのフラグです。true であれば source の内容が正規表現として扱われます。false であれば文字列の完全一致でマッチします。
codeHTTPステータスコードです。最も一般的なのは 301(恒久的なリダイレクト)ですが、302(一時的リダイレクト)や他のコードも指定可能です。
typeリダイレクトのトリガータイプです。通常は url(URLベースのリダイレクト)が使用されます。他に「クエリパラメータ」「ヘッダー」などを使うこともあります。
hits**このリダイレクトが発生した回数(アクセス数)**です。ユーザーが source にアクセスして、target にリダイレクトされた回数の累計です。
titleこの転送ルールのタイトルまたはメモです。管理画面での識別のためのラベルとして使えます。空欄でも動作に支障はありません。
statusルールのステータスです。active であれば有効、disabled であれば無効化されたルールです。

転送ルールのインポート(Access側)

先ほどのCSVファイルをAccessにインポートします。インポート操作によって、新たにテーブルが作成されてデータが格納されます。

ウィザードの起動

Accessを起動して、空のデータベースを作成します。次に「外部データ > 新しいデータソース > ファイルから > テキストファイル」の順に選択して、外部データ取り込みのダイアログを表示します。

ダイアログに、データソース(先ほどのCSVファイル)と保存方法を指定して[OK]ボタンをクリックすると、ウイザードが起動します。

インポートの定義

テキスト インポート ウィザードが起動したら、そのまま[次へ]ボタンをクリックして最初の画面をスキップします。

次の画面が表示されたら、「先頭行をフィールド名として使う」にチェックを入れて、[設定]ボタンをクリックします。

インポートの定義は、次の画面でまとめて実施するのが効率的です。
定義が終わったら、[OK]ボタンをクリックしてもとの画面に戻ります。

  1. 「区切り記号付き」を選択
  2. 「コンマ(,)」を選択
  3. 「ダブルクォーテーション(”)」を選択
  4. 「Unicode (UTF-8)」を選択
  5. フィールド情報が一覧表示されるので、ここで確認しておく
  6. 確認が終わったら[OK]ボタンをクリックしてもとの画面に戻る

ものとの画面に戻ったら[次へ]ボタンをクリックします。
フィールド情報の設定画面が表示されますが、先ほどまとめて確認済みなので、[次へ]ボタンをクリックしてスキップします。

主キーの設定

主キーの設定を指定する画面が表示されます。
今回取り込むフィールドに、主キーに使えるところはないので、「自動的に設定」を選択したままにしておきます。

  1. 「自動的に設定」を選択
  2. [次へ]ボタンをクリック

インポートの実行

テーブル名を入力して[完了]ボタンをクリックすると、インポートが始まります。

  • 作成するテーブル名を入力(日本語も使用できます)
  • [完了]ボタンをクリックするとインポートが始まります

インポートが完了すると操作の保存を促すメッセージが表示されますが、今回は保存しても再利用できる条件は限られるので、そのまま閉じます。

テーブルのラップ

作成したテーブルは、直接使わず一度クエリで“ラップ(抽象化)”しておくと、あとから条件を変更する際にも柔軟に対応できて便利です。

あとで詳細を設定するので、ここではクエリで簡単にラップしておきます。

検出クエリの作成

今回は、2段階及び3段階のリダイレクトを検出するクエリを作成します。

以降、順を追って説明します。

クエリ構造の設定

使用するテーブル/クエリを追加して、テーブル/クエリ間の結合(リレーション)を設定します。

テーブル/クエリの追加

リダイレクトチェーンを辿るのに、このクエリでは転送ルールを再帰的に使用します。

先ほど転送ルールのテーブルをラップしたクエリを3つ、クエリデザイン画面の上部エリアにドラッグ&ドロップします。
「クエリ名」及び「クエリ名_1」、「クエリ名_2」が表示されたと思います。

リレーションの設定(一つ目)

今から「クエリ名」と「クエリ名_1」の間に、リレーションを設定します。

「クエリ名のTarget」を選択後にドラッグして、「クエリ名_1のSource」の上にドロップします。

自動的にリレーションを表す線が引かれます。
引かれた線をダブルクリックすると、リレーションの設定が表示されます。

2段階以上のリダイレクトになっているということは、「Target」が次の転送のまた「Source」になっているということですね。なので、

結果を2段階以上のリダイレクトに絞るには、

両方のテーブルの結合(している)フィールドが同じ(値の)行だけを含める(絞る)。

ということになります。
※これはデフォルトなのでこのままでOKです。

リレーションの追加(二つ目)

さらに、三段階以上のリダイレクトを選別できるように、先ほどの要領で、「クエリ名_1」と「クエリ名_2」の間にもリレーションを追加します。

今回のリレーションのプロパティは、前回とは違います。

同じように設定すると、3段階以上のリダイレクトだけに絞り込まれてしまい、2段階のリダイレクトは表示されなくなってしまいます。そこで、

2段階以上のリダイレクトに絞って、さらに3段階以上のリダイレクトを選別するには、

クエリ名_1の全レコード()、クエリ名_2の同じ結合フィールドの(値が同じ)レコードだけを含める。(すなわち、クエリ名_2に該当するレコードが無い場合はNull値とする。)

ということになります。

完成したクエリ構造は次のようになります。

リレーションのプロパティ設定は表示されている日本が難解なので、そのまま理解しようとすると「???」となりますね。もちろん、間違ってはいないのですが、言葉足らずといったところでしょうか。

出力フィールドの設定

次は出力フィールドの設定です。表示するフィールドの選択、抽出条件、並べ替え、関数の指定などを行います。

出力フィールドの選択

テーブルのフィールドを、クエリグリッドにドラッグ&ドロップして選択します。
次のスクリーンショットは、出力したいフィールドを一通り選んで並べ替えを指定したところです。フィールドのラベルは、表示した時に分かりやすいように、Source、1st Target、2nd Target、3rd Targetに変更しています。

出力フィールドの追加

このままでは、どの転送ルールが適用されているのか分からないので、リダイレクトのルートを「A→B→C」(ABCは転送ルールのID)で表すフィールドを追加したいと思います。

次の式をクエリグリッドの先頭に追加します。フィールド上で右クリックからズームを選択すると、小さなエディタが開くので、式が入力しやすくなります。

Route: 
[Q_転送ルール].[ID] & "→" & [Q_転送ルール_1].[ID] 
& IIf([Q_転送ルール_2].[ID] Is Not Null,"→" & [Q_転送ルール_2].[ID],"")

適用する転送ルールの設定

最後に、転送ルールをラップしたクエリを使って、有効な転送ルールだけに絞り込みます。

「Type」フィールドが”url”で、「Status」フィールドが”active”の転送ルールだけが抽出されるように、クエリグリッドに抽出条件を追加します。

完成した検出クエリ

クエリの内容

完成した検出クエリを、デザインビューで表示したところです。

SQL ビューで表示すると、次のようになっています。
式の中で使用しているクエリ名やフィールド名が同じであれば、このSQLをビュー内に直接張り付けても動作します。

SELECT 
    [Q_転送ルール].[ID] & "→" & [Q_転送ルール_1].[ID] & 
    IIf([Q_転送ルール_2].[ID] Is Not Null, "→" & [Q_転送ルール_2].[ID], "") AS Route,
    Q_転送ルール.source AS Source,
    Q_転送ルール.target AS [1st Target],
    Q_転送ルール_1.target AS [2nd Target],
    Q_転送ルール_2.target AS [3rd Target]
FROM 
    (Q_転送ルール
    INNER JOIN Q_転送ルール AS Q_転送ルール_1 
        ON Q_転送ルール.target = Q_転送ルール_1.source)
    LEFT JOIN Q_転送ルール AS Q_転送ルール_2 
        ON Q_転送ルール_1.target = Q_転送ルール_2.source
ORDER BY 
    Q_転送ルール.source, 
    Q_転送ルール.target, 
    Q_転送ルール_1.target;

実行結果

クエリは、ダブルクリック、右クリックの「開く」、ホームリボンの「表示(データシートビュー)」から実行できます。

なんかマズイくらい検出されてるので、このあとチョット対策します💦

おわりに

「2段階及び3段階リダイレクトを検出可能なクエリ」の作成過程を紹介しました。

今回ご紹介したように、Accessを使えばリダイレクトチェーンのような複雑なデータの関係性も視覚的かつ効率的に把握することができます。

普段はあまり注目されないツールかもしれませんが、Accessはデータの整理・分析において非常に頼れる存在です。基本的な使い方を身につけておくだけでも、さまざまな場面で役立つことでしょう。

ぜひこの機会に、Accessの便利さを実感してみてください。

  • URLをコピーしました!
目次