2024-06-28

JSON-LDを何とかする。

昨今のSEO対策(自サイトをGoogleなどの検索エンジンで上位に表示させる為の施策)では、Googleが推奨しているJSON-LDといった構造化データをウェブページに組み込む事は、ネットでの情報発信に最早必要不可欠となっているが、これらを情報資源に施す事は、簡潔なマークアップ構造を複雑にしてデータ容量を増大させる。

構造化データは、複雑そうで取っ付き難そうな仕組みではあるが、スキームの語録や構造を大雑把で良いので把握してしまえば、実は単純ではあるが、セマンティクスに拘れば拘るだけ簡潔に記す事が出来るマークアップ構造を無駄に肥大化させてしまうデメリットもある。そしてこれらは、閲覧者が使用するブラウザが構造化データを活用できるのであれば有用なのだが、現状ではSEO対策の為だけに組み込まれる。つまり、情報発信する側のSEO対策の為のツケを閲覧者に負わせている事になる。これは私のウェブサイトの構造に限った話しではなく、SEOを意識している世界中のウェブサイト全体でそうなのである。個々のサイトでは微量でも世界中ともなれば、この余計なデータの為の電力消費量はどれだけになるのだろうか?

ところで、本サイトは、ブログなどの記事を更新する度にHTMLをべた書きしている訳ではなく、CMS(コンテンツ管理システム=WordPressなどの様なブログ機能などを備えたツール)を使用している訳でもなく、20年以上前に自信で設計したXMLとXSLによるXSLT変換をサーバ側で行う仕組みにより情報資源を作成・公開しており、記事追加の際には自信設計のXMLで記している。このXMLは、文書構造の章節は section、見出しは h(headingを意味する見出し要素 h は入れ子構造でレベルを判別)とマークアップする等、マークアップ構造的にはXHTML2.0やHTML5に近く時代を先取りしていた。そして、パンくずリストなどはsiteindex(Google検索の為のものとは違う。それ以前の設計したものでディレクトリ階層構造になっている。)により切り離しており、XSLT変換時に自動的に生成されるので毎回記述する必要はない。マークアップ言語の仕様変更の際などに何度かXSLの設計を見直し修正を加えてはきたが、大部分は設計当時のままである。MicrodataやJSON-LDについては、出力の際に使用するXSLで施しており、XSLは一度設計してしまえば変更が必要になった時以外は弄る事はないので、ブログなどの記事を作成する都度に記述する必要はない。ただ、先述した様に、現状ではSEO対策の為だけに埋め込まれた構造化データは、閲覧者に何の役にも立たないのに組み込まれる事になる。そこで、リクエストヘッダでUAを判別して、構造化データが必要になるGoogleなどの検索エンジンのクローラーやフェッチャー(URLをリクエストするツール)にはJSON-LDを提示し、それ以外(閲覧者のブラウザなど)では隠滅する事にした。これに合わせてMicrodataは完全排除し、JSON-LDのみに変更した。

JSON-LDの仕様(W3C勧告)では、7.Embedding JSON-LD in HTML Documents [引用: https://www.w3.org/TR/json-ld11/#embedding-json-ld-in-html-documents より] にHTML文書にJSON-LDを組み込む場合は、script要素に記すと規定されており、外部ファイルでは使えない。そこで、隠滅方法については、6. Modifying Behavior with Link Relationships [引用: https://www.w3.org/TR/json-ld11/#alternate-document-location より] にHTTPヘッダを使う方法があるので、同様の方法として以下の様に link rel を使う事にしてみた。まぁ、実際のところ、ブラウザは対応してない訳なので、link rel で明示したところで無意味であるが、ソースを見た人が分かればそれで良い(苦笑)。

<link rel="alternate" type="application/ld+json" href="/weblog/2024/06/28.jsonld" title="JSON-LD">

構造化データを「神のお告げ」かの如く何の疑問も持たずに組み込むウェブ制作者が多い事に疑問である。本来ならば、構造化データを推奨しているGoogleなどが link rel での方法に対応さえすれば、JSON-LDをHTMLから切り離せる訳だが、全く期待出来そうにない。