First CH Apps / 構造化データ(JSON-LD)抽出・検証
URLを入れると、そのページの <script type="application/ld+json"> をサーバー側で全て取り出し、@type ごとに整形して表示します。JSONの構文エラーは行・列つきで指摘し、主要タイプ(Article・FAQPage・BreadcrumbList・LocalBusiness・Organization)は必須・推奨プロパティが埋まっているかを一覧します。
構造化データを新しく作るなら tools.first-ch.com の「JSON-LD構造化データ生成」が担当です。ここは作ったものが実際に配信されているHTMLに入っているか、値が欠けていないかを確かめる確認側で、リッチリザルト対策の入口として使います。
検出するのは <script type="application/ld+json"> だけです。microdata(itemprop)・RDFa は対象外で、JavaScriptで後から挿入される JSON-LD も取得時点に存在しないため含まれません。
HTMLコメント(<!-- -->)の中の JSON-LD は画面に出ないため数えません。
@graph とトップレベルの配列は展開して1件ずつ検証します。プロパティの中に入れ子になったオブジェクト(author の Person など)は、親の必須プロパティの判定の中で見ます。
「必須」は、当アプリが「無いと構造化データとして機能しない」とみなす中核プロパティです。Googleのリッチリザルト要件は型ごとに異なり、必須/推奨の線引きも変わりうるため、最終判定はGoogleのリッチリザルトテストで行ってください。
空文字・空配列・@type だけのオブジェクトは「値が入っていない」として扱います(キーがあっても充足とはみなしません)。
対応表にあるのは Article(BlogPosting・NewsArticle等を含む)・FAQPage・BreadcrumbList・LocalBusiness(Restaurant・Dentist等の下位型を含む)・Organization(Corporation等を含む)です。それ以外の型は構文と @context / @type の有無だけを見ます。
送るもの: 入力されたURLだけ。当社サーバー(Cloudflare Workers)がそのURLを公開ページとして1回だけ取得します。
保存するもの: ありません。検証はリクエストの中だけで完結し、URL・検証結果ともデータベース(KV/D1)へ書き込みません。処理が終わった時点でメモリから消えます。
返すもの: 抽出した JSON-LD を表示用に組み直したものと判定だけです。取得したHTMLの原文は再配信しません(このアプリは他サイトを閲覧するための中継として使えません)。長い文字列・深い入れ子・大きな配列は表示用に切り詰めます。
注意: 取得は公開GETのみで、社内ネットワーク・localhost・プライベートIP宛のURLは受け付けません。ログイン後にしか見られないページ、JavaScriptで構造化データを描画するページは正しく検証できません。
POST /structured-data/api/inspect に JSON({"url": "https://example.com/"})またはフォームを送ると、同じ検証結果(ブロック・ノード・判定)を JSON で返します。