固定ページにサブディレクトリURLで値を渡すショートコードサンプル
このページはWordPressで言うところの「固定ページ」で作成しています。
URLは「https://rensrv.com/sitemap-xml/」となっています。
このURLの後に任意のサブディレクトリ階層を付けると、
そのディレクトリ名を表示するという簡単なサンプルプログラムです。
WordPressの仕組みを知っている方にすれば、
この固定ページを親にして、下にさらに固定ページをつけて、
「https://rensrv.com/sitemap-xml/hogehoge/」とすることができるのはご存知でしょう。
いくつでも固定ページをぶら下げることができます。
しかしここでご紹介したいのは、そういう話ではありません。
概要
WordPressに実体のないURLから値をプログラムで受け取って表示する
現在表示しているこのページの投稿IDは以下になっています。
「39249」と表示されているはずです。
以下は動的に表示しています。
39249
では先ほどの「https://rensrv.com/sitemap-xml/hogehoge/」にアクセスをしてみてください。
同じID(39249)が表示されているはずです。
即ち
「https://rensrv.com/sitemap-xml/」と
「https://rensrv.com/sitemap-xml/hogehoge/」は、
WordPress上では同じ「固定ページ」を表示しています。(内部リライト処理)
固定ページを親子にしている訳ではありません。
URLクエリ文字列値を表示するプログラムの出力
URLを「https://rensrv.com/sitemap-xml/hogehoge/」として、
このページを表示した場合の違いは以下に「hogehoge」と表示されている事と、
ブラウザのアドレスバーが「https://rensrv.com/sitemap-xml/hogehoge/」になっている点です。
まだURLから値を受け取っていません。
URLから文字列を値として受け取っていますので、
当然ですが「https://rensrv.com/sitemap-xml/ほげほげ/」でも構いません。
この仕組みは以前、投稿でご紹介したものの固定ページ版になります。
このように1つの固定ページ(投稿)に対して、
URLを分けて、受け取った値に応じたコンテンツをショートコードで実現することができます。
こうした仕組みを実現するには以下の手順で行う事ができます。
簡単なサンプル例
では、次にこのようなケースはどうでしょう。
「https://rensrv.com/sitemap-xml/weekday/2018/01/01/」
上記のURLは入力されたURLのパスで指定されている日付から、
プログラムで曜日を求めて返すというプログラムを割り当てています。
URLにアクセスすると、その日の曜日が表示されます。
さてこれはURLで指定された日付を元にして、
それぞれの日付を求めて表示しています。
という事は、 PHPのdatetimeクラスで扱える日付の範囲の数だけの
種類分URLが存在している事になります。
明確に範囲の記述はヘルプで見つけられませんでしたが、
「100/01/01~9999/12/31」の範囲でとりあえずは動作しています。
※99/12/31など2桁年指定は、1999/12/31として認識されちゃう的な2000年問題とか。
その間の日数を数えてみると3,615,901 日あるとされます。
という事は「weekday/」の下に「3,615,901」種類のURLが存在している事になります。
さすがに、361万5千もの固定ページを
このページを親にして全部一々作るバカはいませんよね?
WordPressの固定ページをプログラムで自動生成して、
一瞬で作らせることもできますけども・・・(100とか200はやった事はある)。
それでもデータベースを無駄に圧迫するだけになりますし、
とても現実的とは思えません。
ですので、この日付形式のURLはWordPress内には、
固定ページとしてのデータは存在していません。
架空のURLで処理はすべてリンク先ページ1つが行っています。
結果、URLの種類としてはかなり膨大になります。
ですが、この仕組み。
URLの文字列で与えたバリエーションに応じて、
表示するコンテンツがしっかり意味のあるものを表示していて、
“重複コンテンツにならない”のであれば・・・
1つの固定ページが、何万ものコンテンツになりうるという事です。
元々プログラムとはそういう効率的な処理を行うためにあるのですから。
サイトマップ生成の考え方
この場合、固定ページとしてのデータがそもそもありませんので、
サイトマッププラグインを使った所でプラグインはそのURLを知る術がありません。
ですので、独自にURLを知らせる為のサイトマップが必要になります。
実際に例として作成するサイトマップは以下のようになります。
ただサイトマップには制限があります。
1ファイル5万件又は50MBを超えないこと。
となっています。
3,615,901 / 50000 = 72.31802 ですので、最低でも72分割する必要がある事になります。
中途半端に分けても仕方がないので、
100年単位でサイトマップファイルを分割するような形になるでしょうか。
※作りやすく管理しやすい方法でいいと思う。
こんな日付から曜日を求めるだけのサイトマップは実際には登録しません。
あくまでもサンプルです。
そもそも既にGoogle検索結果のみで得られる情報になってしまい何ら価値はありません。
サイトマップを出力するプログラムを用意し、
サイトマップの仕様に合せて出力を行います。
このような仕組みでどんなサイトを作るかは、あなた次第というところでしょうか^^
誰かに便利なものを、少ない労力で作る。
面倒くさがりはSEやプログラマの一番大切な素質だと昔言われました。
(手抜きは除く)
実際の導入事例
実例として採用してみたのが以下のサイトになります。
以下では処理実行後の結果を表示しています。
上記ではCIDRというIPアドレスの範囲を示す記述方法を、
IPアドレスに展開して表示し目視確認する機能を提供しています。
Google検索結果においても、
それぞれのCIDRごとの検索結果のリンクとして個々が表示されているのが分かります。
https://www.google.co.jp/search?q=site%3Ahttp%3A%2F%2Fipvx.info%2Fipv4%2Fcidr2extip%2F&oq=site%3Ahttp%3A%2F%2Fipvx.info%2Fipv4%2Fcidr2extip%2F&aqs=chrome..69i57j69i58.20462j0j1&sourceid=chrome&ie=UTF-8
ただ、この程度の機能であれば、
他のサイトさんでもCIDRを入力すれば結果が得られます。
ただ、絶対必要だった作業手順が、、、
① 検索窓に「CIDR IPアドレス展開」などのキーワードで入力して検索結果を表示。
② 目的のサイトを結果から探して移動。
③ フィールドにCIDR値をコピペ(27.100.32.0/22)して、実行し目的達成。
の3ステップです。
だったら「CIDR 27.100.32.0/22|Google検索結果」で表示された結果から、
ワンクリックすれば、すぐに値が表示されて確認できる。
1回の検索とクリックで完結するようになるかなと思ったのです。
サブディレクトリのURL形式をうまく使って、
重複などをしっかり除外した上でサイトマップに一覧化することで、
ユーザー利便性とサイトのインデックス獲得の両方にメリットが生まれるものと考えます。
【注意】
上記で例示した検索結果のインデックス登録は検索利便性向上を目的としてやっているつもりです。
ですが、登録要求をしているインデックス数が非常に膨大なため、
サイトに対してGoogleからペナルティーなどの制裁を受ける恐れもあると考えています。
上記サイトは元々アクセス数が少ない瀕死のサイトです。
ペナルティーを受けるリスクを覚悟して実施している施策であることを申し添えます。
似た事をされる場合は、それなりの覚悟で自己責任でお願いします。
※Fetch as Googleは行わず、サイトマップ登録のみでインデックス要求しています。
一番面倒くさいのが「重複URLの除外」なんですけどね。
個々のページで表示の際に内容が重複する場合には「canonical」指定も忘れずに。
そして「canonical」指定したURLはサイトマップに含まないように。。。
誰もやりたくないよな、たぶん、こんなこと。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日:
最終更新日:2018/06/01