Skip to content

Note

このドキュメントは2026-02-27 02:27PLaMo Translation Modelを使用して自動翻訳されました。

FEP-22b6: HTMLページとActivityPubオブジェクト間のリンク設定とその逆方向のリンク設定

概要

ハイパーリンクはインターネットの基本的な構成要素である。本FEPでは、HTMLページからActivityPubオブジェクトへのリンク方法、およびその逆方向のリンク設定方法について説明する。ここで記述するメカニズムは新しい概念ではなく、RSSフィードへのリンク(alternate参照、第2例)などで既に利用されている技術である。

HTMLページからのリンク設定

HTML Living Standard規格ではalternateについて以下のように規定している:

このキーワードは、現在の文書の代替表現を参照するハイパーリンクを作成する。

この定義に基づき、HTMLページからActivityPubオブジェクトへのリンクは以下のように記述できる:

<head>
    ...
    <link rel="alternate" type="application/activity+json" href="http://location.example/object.id">
    ...
</head>

これは自動発見機能として利用できる。ユーザー向けの明示的なリンクを提供する場合は、アンカー要素を使用するべきである:

<body>
    ...
    <a rel="alternate" type="application/activity+json" href="http://location.example/object.id">
        ActivityPubオブジェクト
    </a>
    ...
</body>

異なる用途に対応するため、両方の形式を使用することを推奨する。

[!WARNING] 仮にHTMLページが単にActivityPubオブジェクトの内容を表示している場合でも、canonicalではなくalternateを使用するべきである。著者としては、ここで提案する単一フォーマットに統一することが、広範なサポートを得る上で最も高い可能性を持つと考えている。

議論事項

後述の具体例で示すように、ActivityPubオブジェクトとHTMLページが異なるサーバーに存在するケースも想定される。この場合でも、ActivityPubオブジェクトがHTMLページへの逆リンクを含んでいることを確認することで、両者の関係性を検証することが可能である。

逆に、ActivityPubオブジェクトがHTMLページよりも少ない情報量しか提供していない場合もある。

具体例

https://bovine.codeberg.page/comments/ というページには、以下のlink要素が含まれている:

<link rel="alternate"
  href="https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8="
  type="application/activity+json">

このリンクが指し示すオブジェクトの内容は以下である:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Page",
  "attributedTo": "https://comments.bovine.social/actor/rF4xnx1QraAIU3Krg-2Qzg",
  "to": [
    "https://www.w3.org/ns/activitystreams#Public"
  ],
  "published": "2025-10-20T17:45:11Z",
  "url": [
    {
      "type": "Link",
      "href": "https://bovine.codeberg.page/comments/",
      "mediaType": "text/html"
    }
  ],
  "name": "コメント追跡システム",
  "summary": null,
  "id": "https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8=",
  "context": "https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8=/context",
  "replies": "https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8=/replies",
  "likes": "https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8=/likes",
  "shares": "https://comments.bovine.social/pages/aHR0cHM6Ly9ib3ZpbmUuY29kZWJlcmcucGFnZS9jb21tZW50cy8=/shares"
}

このPageオブジェクトは、ActivityVocabularyにおけるPage、すなわち「ウェブページを表す」概念として理解できる。

代替手法

既に述べた通り、HTMLからActivityPubオブジェクトへのリンクにはこの推奨方法を使用することを推奨する。

ただし、リンクを提供するための他の既存手法も存在し、有効な選択肢として考慮する必要がある:

FEP-136c: コメント追跡サービスという本作業の動機となったユースケースにおいては、HTMLへのリンク埋め込みが唯一の現実的な選択肢となる。これは、HTMLページが静的サイトにホストされていることが多く、コンテンツネゴシエーションやLinkヘッダーを使用するオプションを提供していない場合が多いためである。

参考文献

著作権

CC0 1.0 Universal(パブリックドメイン献呈)

法律で許容される範囲内において、本Fediverse Enhancement Proposalの著者らは当該著作物に関するすべての著作権および関連権利を放棄する。