個人ウェブサイト向けの JSON-LD とは

2026/06/22 3:51

個人ウェブサイト向けの JSON-LD とは

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

検索エンジンがあなたのウェブサイトの内容を理解する最も効果的な方法は、各ページの

<head>
セクション内に
<script type="application/ld+json">
ブロックを使用して、JSON オブジェクトを含む JSON-LD 構造データを実装することです。この技術的アプローチは、約 4 ヶ月間、サイト開発に合計 100 時間を要した後に採用され、 crawlers が
@graph
下に格納された導かれたグラフ構造を通じてコンテンツをよりよく解釈できるようにします。これにより、リンクプレビューが改善され、ランキングも潜在的に向上します。このプロセスは、
@context
プロパティに対して
https://schema.org
スタンダードに基づいており、各ページがノードとして機能し、特定のプロパティを必要とします。ルートページには完全な "WebSite" ノードを含め、他のページは最小限のバージョンを使用します。また、個人向けのサイトは知識グラフにおけるアイデンティティ混同を防ぐために、
url
name
image
sameAs
という重要なプロパティを持つ "Person" ノードを含む必要があります。専用の "ProfilePage" は、メインサイトと著者を
isPartOf
および
mainEntity
を使用して接続すべきです。プロジェクトは "SoftwareApplication" ノードを利用し(オープンソースの場合は、しばしば
offers
の値が 0 となる)、 "BreadcrumbLists"、"CollectionPage"、"Blog"、そして "BlogPosting" サブタイプを含めることで、正確なナビゲーションパス、リストのカテゴリ分類、および検索結果での投稿の配置を確実にします。結局のところ、この精密なセマンティック構造化は、リッチな検索結果、より良いコンテンツ品質メトリクス、ならびに主要プラットフォームによるより正確なインデックス化をもたらします。

本文

個人サイトへの JSON-LD(構造化データ)実装ガイド

JSON-LD(JSON リンクト データ)は、ウェブページに構造化データを追加する形式です。これにより、Web クローラーがサイトの意味的な構造を把握しやすくなり、より豊富なリンクプレビューや検索結果のランク付け改善につながります。

本稿では、静的サイトでもビルドステップなしで実装可能な、個人サイトに必要な JSON-LD の種類と設定方法を解説します。

基本概念と導入方法

ページに JSON-LD を追加するには、

<head>
セクション内に以下のスクリプトタグを配置します。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://hawksley.dev/#website",
      "url": "https://hawksley.dev/",
      "name": "Ethan Hawksley"
    },
    // ここにさらにノードを追加します。
  ]
}
</script>

スクリプトタグの意味

<script type="application/ld+json">
  • MIME タイプ:
    application/ld+json
    を指定することで、ブラウザの JavaScript エンジンがこれを実行しないようブロックします。
  • 解析対象: Googlebot などの専門的なクローラーはこの要素を検出し、中身を解析・インデックス化します。

コンテキストの設定

{
  "@context": "https://schema.org"
}
  • データ構造を決定する**スキーマ(コンテキスト)**を定義します。
  • Web クローラーは標準として Schema.org を使用するため、有効なキーと値のペアが定義されます。

グラフ構造 (
@graph
)

JSON-LD は

@context
下で管理されるラベル付き有向グラフと見なせます。 各ノードには以下の要素が含まれます:

  • @type
    : ノードが表す実体(例:
    WebSite
    ,
    Person
    )。
  • @id
    : ノードの一意な識別子。ベストプラクティスは、末尾にハッシュ値を持つ URL の形式(例:
    #website
    )です。
  • プロパティ: 実体の属性を記述するキー/値ペア。

※ クローラーは ID が共通すれば複数ページからプロパティを統合できますが、LLM などの単一ページ読み取り用スクリーパーは統合しないため注意が必要です。


各ページタイプごとの設定例

SEO やクローラーへの表示改善のために必要なノード(WebSite, Person など)を中心に解説します。

WebSite(サイト全体の識別子)

サイトのメタデータを示し、Google がドメインをどう表示すべきかを指示します。ルートページには詳細な設定を、他ページには簡易版を使用できます。

【推奨:詳細な設定】

{
  "@type": "WebSite",
  "@id": "https://hawksley.dev/#website",
  "url": "https://hawksley.dev/",
  "name": "Ethan Hawksley",
  "alternateName": ["hawksley.dev", "Hawksley"],
  "description": "The personal site and technical blog of Ethan Hawksley...",
  "inLanguage": "en-GB",
  "publisher": { "@id": "https://hawksley.dev/#person" },
  "image": {
    "@type": "ImageObject",
    "@id": "https://hawksley.dev/#website-image",
    "url": "https://hawksley.dev/logo-square.png",
    "caption": "Ethan Hawksley Logo"
  }
}

【簡易版(子ページ用)】 ルートページの代わりに使っても十分です。

{
  "@type": "WebSite",
  "@id": "https://hawksley.dev/#website",
  "url": "https://hawksley.dev/",
  "name": "Ethan Hawksley"
}

WebPage(物理的なページ)

現在の HTML ページそのものを表します。他のタイプ(

BlogPosting
など)とは区別してください。 ※
ProfilePage
CollectionPage
のようなサブタイプも存在します。

{
  "@type": "WebPage",
  "@id": "https://hawksley.dev/blog/hack-club-campfire/#webpage",
  "url": "https://hawksley.dev/blog/hack-club-campfire/",
  "isPartOf": { "@id": "https://hawksley.dev/#website" },
  "name": "Winning the Hack Club Campfire Hackathon",
  "inLanguage": "en-GB",
  "breadcrumb": {
    "@id": "https://hawksley.dev/blog/hack-club-campfire/#breadcrumb"
  }
}

Person(人物プロフィール)

「あなたの是谁」を表す重要なノードです。Google はこれをコンテンツ品質の指標として使用し、LLM クローラーも人物参照に利用します。すべてのページ(特に自己紹介)で含めるのが望ましいです。

注意: プロパティは多数ありますが、重要度の高いものを中心に配置してください。

{
  "@type": "Person",
  "@id": "https://hawksley.dev/#person",
  "url": "https://hawksley.dev/",
  "name": "Ethan Hawksley",
  "alternateName": "ethanhawksley",
  "givenName": "Ethan",
  "familyName": "Hawksley",
  "description": "Long Description",
  "disambiguatingDescription": "Shorter Description",
  "jobTitle": "Computer Science Student",
  "knowsLanguage": "en-GB",
  "knowsAbout": [ /* キーワード */ ],
  "nationality": { "@type": "Country", "name": "United Kingdom" },
  "homeLocation": {
    "@type": "Place",
    "address": { "@type": "PostalAddress", "addressCountry": "GB" }
  },
  "affiliation": [ /* 所属機関 */ ],
  "alumniOf": [ /* 卒業校 */ ],
  "image": {
    "@type": "ImageObject",
    "@id": "https://hawksley.dev/#person-image",
    "url": "https://hawksley.dev/ethan-hawksley.png",
    "caption": "Ethan Hawksley"
  },
  "sameAs": [
    "https://github.com/ethan-hawksley",
    "https://www.linkedin.com/in/ethanhawksley",
    // ... 他のプロフィールリンク
  ]
}

特に重要なプロパティ:

  • url
    : ルートページへのアンカー。
  • name
    ,
    givenName
    ,
    familyName
    : 氏名を明確に定義。
  • image
    : プロフィール画像(ロゴなど)を標準的に結びつける。
  • sameAs
    : 分散したプロフィールリンクを統合し、知識グラフの構築を支援(重複解消に有効)。

ProfilePage / CollectionPage / Blog など(ページカテゴリ別)

ProfilePage(人物詳細ページ)

自分のプロフィールや「About」ページで使用します。より広い

WebSite
と連結し、主題となる実体 (
mainEntity
) を明示する必要があります。

{
  "@type": "ProfilePage",
  "@id": "https://hawksley.dev/#webpage",
  "url": "https://hawksley.dev/",
  "isPartOf": { "@id": "https://hawksley.dev/#website" },
  "name": "About Ethan Hawksley",
  "mainEntity": { "@id": "https://hawksley.dev/#person" }
}

SoftwareApplication(ソフトウェアアプリ)

公開したソフトウェアのメタデータです。プロジェクトページの URL とソースコードリンク(

sameAs
)を記載し、カテゴリや価格(FOSS は
0
など)を設定します。

{
  "@type": "SoftwareApplication",
  "@id": "https://hawksley.dev/#project-yt-play",
  "url": "https://crates.io/crates/yt-play",
  "name": "yt-play",
  "description": "A CLI utility written in Rust...",
  "applicationCategory": "MultimediaApplication",
  "offers": {
    "@type": "Offer",
    "price": 0,
    "priceCurrency": "GBP"
  },
  "creator": { "@id": "https://hawksley.dev/#person" }
}

BreadcrumbList(パンくずリスト)

ルートページを除く全てのページに含めるべきです。実際のパスとは限らず、検索結果での階層構造の表示を制御します。長すぎるパスを短く表示したい場合に有効です。

{
  "@type": "BreadcrumbList",
  "@id": ".../#breadcrumb",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home" },
    { "@type": "ListItem", "position": 2, "name": "Blog" },
    { "@type": "ListItem", "position": 3, "name": "Article Title" }
  ]
}

CollectionPage(リストページ)

ブログ一覧や他のプロフィール一覧など、複数の項目をまとめたページです。

WebPage
のサブタイプとして機能し、含まれる内容 (
about
) やパンくずリストを指す必要があります。

{
  "@type": "CollectionPage",
  "@id": ".../#webpage",
  "isPartOf": { "@id": "https://hawksley.dev/#website" },
  "name": "Elsewhere",
  "about": { "@id": "https://hawksley.dev/#person" }
}

Blog(ブログインデックス)

ブログトップページで使用します。

WebSite
と個別の投稿 (
BlogPosting
) の中間となる架け橋役を果たします。ライセンス情報を含めることで再利用条件を明示できます。

{
  "@type": "Blog",
  "@id": "https://hawksley.dev/blog/#blog",
  "isPartOf": { "@id": "https://hawksley.dev/#website" },
  "mainEntityOfPage": { "@id": ".../#webpage" },
  "name": "Ethan Hawksley's Blog",
  "license": "https://creativecommons.org/licenses/by/4.0/"
}

BlogPosting(個別のブログ記事)

すべての公開記事に含めるべき最も詳細なノードです。検索結果での配置改善やリッチプレビュー表示に直接寄与します。

{
  "@type": "BlogPosting",
  "@id": ".../#blogposting",
  "mainEntityOfPage": { "@id": ".../#webpage" },
  "isPartOf": { "@id": ".../#blog" },
  "headline": "Title of the Post",
  "description": "A concise summary...",
  "articleSection": "cybersecurity",
  "keywords": "cybersecurity, quantum",
  "inLanguage": "en-GB",
  "datePublished": "...",
  "dateModified": "...",
  "author": { "@id": "https://hawksley.dev/#person" },
  "publisher": { "@id": "https://hawksley.dev/#person" },
  "image": {
    "@type": "ImageObject",
    "url": "og-image-url.png",
    "width": 1200,
    "height": 630
  },
  "license": "..."
}

注意点:

  • author
    publisher
    : 個人サイトでは同じ
    Person
    ノードを指して問題ありません。
  • image
    : リンクプレビューで使用されている OG 画像(Open Graph Image)と一致させてください。

まとめ

上記の JSON-LD ノードを実装することで、個人のウェブサイトでも検索エンジンや AI クローラーに対して**「自分についての正確な情報」**を伝達できます。

  • 最小限の実装: 静的サイトなどでビルドステップがない場合でも、ルートページに
    WebSite
    、プロフィールページに
    Person
    を含めるだけでも恩恵を受けます。
  • コピー&ペースト可: 各セクションのコードブロックは編集してそのまま使用可能です。

詳細な実装や疑問点がございましたら、お気軽にご連絡ください。

同じ日のほかのニュース

一覧に戻る →

2026/06/22 6:29

アペルトス:主権 AI 向けのオープンファウンデーションモデル

## Japanese Translation: スイス AI イニシアチブによって、EPFL、チューリッヒ工科大学(ETH)、CSCS の協力により、画期的な完全にオープンな多言語 AI モデルが開発されました。本モデルは、全データの透明性を確保しながら強力な技術への即時アクセスを提供します——再現性を確保するため、すべてのデータ、コード、重み付け、手法、アライメント原則が文書化されています。1,000 以上の言語から DAY ONE にトレーニングを開始し、8B および 70B パラメータ規模の両方で競争力を誇る性能を実現しています。EU AI アクトの要件に厳格に準拠しており、データ opting-out を尊重し、個人情報を削除するとともに、メモライゼーションを防止します。スイスエコシステム内でスイスコミが戦略パートナーとして携わっており、本イニシアチブはさらなる開発のためのグローバルなスケーラブルな基盤となっており、強力な能力と責任ある管理の間でバランスを保つ道徳的で再現可能な枠組みを確立しています。

2026/06/22 6:40

私の以前の職場は不正行為があるためにだけ存在していたのでしょうか?

## Japanese Translation: 最も重要な教訓は、UK のスタートアップ GenieDB が、そのコア技術革新は後に真面目な業界プレイヤーによって採用されたにもかかわらず、ポートフォリオの成長のためではなく、投資家の資金を手数料主導で吸い上げるための仕組みを可能にするために、Stuart Frost 所有の US ベンチャーファンド「Frost VP」に買収された点である。GenieDB は M&A を狙って収益機会を積極的に見送っており、顧客数は最大 3 ヶ社を超えたことがなかった。また、チームが交代させられ、U.S. に残ったのは著者の一人だけだった。10 年後、Frost VP が SEC から詐欺容疑で訴えられたというニュースが明らかになり、同社は関連のないサービス(例:料理人を雇う個人シェフサービス、クリーニング業者、ビザスポンサーシップやマーケティング会社など)に対して過剰な手数料を徴収するインキュベーターとして活動していたことが判明した。仲裁の結果、投資家が勝訴し、反訴では上記のような詐欺の嫌疑が詳細に記載されていた。Frost は当初、投資家との共謀を主張したが、証拠に立ち向かうことができず敗訴した。GenieDB の CEO やインサイダーは両方とも、投資がこの手数料モデルに動機付けられていたことを認めたが、裁判所は GenieDB がなぜポートフォリオに加わったのかについて具体的な理由を判定することはなかった。このスキームは資金残高を枯渇させ、著者の人生軌道(U.S. 市民権の喪失やキャリアの安定性への影響を含む)を変え、さらに Frost から資金管理の禁止という恒久的な禁制を下すことで、事実上 Frost VP の運営を終了させた。この事例は、高額手数料型のインキュベーターモデルについて鋭い警告を示しており、詐欺的な手数料構造が正当な企業価値を覆い隠し、投資家や従業員双方に壊滅的な長期的影響をもたらす可能性があることを示している。

2026/06/22 6:10

すべては対数なりである

## Japanese Translation: 以下の文章は、情報のすべてを維持しつつ、流れと簡潔性を向上させるための改訂版である: > 本書は、対数($\log N$)を具体的な底を持たない抽象的な実体として捉え直すことで、特定の単位や底が選択される場合にのみ数値的値を獲得するという視点を提案する。この見解は、点そのものが基礎的なものであり、原点の選択を行うことで初めて数値的な変位(displacements)となるベクトル幾何学の概念と直接的な対応を確立する。この枠組みにおいて、対数の底の変更は物理的な単位系の変更、あるいは微積分における微分形式の書き換えに等しい。この議論は対称性を他の分野にも拡張しており、$p$ 進評価($p$-adic valuation)や複素解析における消滅位数(order of vanishing)は、対数代数的構造内での投影として機能し、さらにベクトル空間の対数としての振る舞いを見せる次元などは、分数次元といった仮想的な構成すら許容する。自然対数を多項式の振る舞いと関連付ける極限や導関数を通過して再定義することで、本書は次元、導関数、評価という一見異なる概念が、乗法的構造と加法的结构との間のより深い同型写像(isomorphism)の現れであるとして論じる。結局のところ、この視点を採用することにより、数学に一般共変性(general covariance)を適用することは、冗長な単位依存記号によって遮られている単純で座標freeな実在にアクセスする手段を示唆している。

個人ウェブサイト向けの JSON-LD とは | そっか~ニュース