The initial response is the share contract.
LinkedIn requires Open Graph fields in source markup and may cache previews. Route-specific metadata should therefore exist before application hydration. S2S3
For shared SPAs, trustworthy publication requires seven coordinated layers: stable identity, share previews, semantic meaning, visible evidence, rights signals, delivery integrity, and verifiable authenticity.
HTML linksOpen GraphJSON-LDPROV-OTDM / AI prefsDigest / CSPC2PA 2.4Every externally shared artifact should arrive with complete initial metadata, visible authorship and AI disclosure, an immutable revision identity, a source ledger, and a correction path. Add cryptographic signing only when the publishing workflow can preserve and verify final bytes.
Metadata becomes coherent when each representation has a single job. Do not force HTML meta tags to carry lineage, licensing, delivery security, and cryptographic proof at once.
| Layer | Question answered | Primary mechanism | Failure if omitted | Status |
|---|---|---|---|---|
| Identity | What work and revision is this? | canonical, cite-as, version links, identifiers | Routes collapse into an ambiguous document identity. | Stable |
| Preview | How should this URL render when shared? | Open Graph and a public absolute image URL | Generic, stale, or empty cards. | Stable |
| Semantics | What entities and relationships are present? | Schema.org JSON-LD | Search and downstream systems infer structure inconsistently. | Stable |
| Evidence | What supports each material claim? | Visible source anchors, claim ledger, PROV-O sidecar | Sources become decorative rather than auditable. | Stable |
| Rights | What use is permitted, reserved, or licensed? | license, usageInfo, TDMRep; emerging AIPREF | Provenance is mistaken for permission. | Mixed maturity |
| Delivery | Was this response delivered intact and under what policy? | HTTP headers, digest fields, CSP, caching | The page can be correct at build time but altered or mis-served. | Stable |
| Authenticity | Can signed assertions be verified against this exact asset? | Content Credentials / C2PA | “Verified” remains a self-asserted badge. | Advanced |
LinkedIn requires Open Graph fields in source markup and may cache previews. Route-specific metadata should therefore exist before application hydration. S2S3
Generate HTML tags, JSON-LD, the visible panel, source ledger, and signing inputs from the same canonical artifact record.
Content Credentials can verify association and tamper evidence, but provenance alone cannot establish that content is accurate or complete. S9
Use absolute production URLs, explicit lifecycle dates, registered link relations, and a stable preview image. Do not include a C2PA link until a real manifest exists and verifies.
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Artifact title · Publisher</title>
<meta name="description" content="Factual, standalone synopsis.">
<meta name="author" content="Accountable person or organization">
<meta name="generator" content="Artifact pipeline 4.0">
<meta name="robots" content="index,follow,max-image-preview:large">
<meta name="referrer" content="strict-origin-when-cross-origin">
<!-- Work identity and rights -->
<link rel="canonical" href="https://example.com/research/provenance">
<link rel="cite-as" href="https://example.com/research/provenance/v/2.1.0">
<link rel="latest-version" href="https://example.com/research/provenance">
<link rel="author" href="https://example.com/authors/name">
<link rel="license" href="https://example.com/licenses/content">
<!-- Share preview -->
<meta property="og:title" content="Artifact title">
<meta property="og:description" content="Standalone synopsis.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://example.com/research/provenance">
<meta property="og:image" content="https://example.com/assets/provenance-v2.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Meaningful description of the preview image.">
<meta property="article:published_time" content="2026-07-21T18:48:00-04:00">
<meta property="article:modified_time" content="2026-07-21T18:48:00-04:00">
<!-- Add only after signing and deployed-byte verification -->
<link rel="c2pa-manifest"
href="https://example.com/provenance/artifact-v2.c2pa"
type="application/c2pa">Relative URLs are acceptable in a downloadable file but are not a public deployment contract.
cite-as for the immutable recordThe registered relation identifies the preferred permanent citation target. S10
Google recommends a resolvable author URL or sameAs to disambiguate identity. S4
Share systems cache previews. Version the image URL and inspect the final public URL before launch. S3
Use Schema.org for public meaning and discovery. Use a separate evidence ledger or PROV-O sidecar for detailed generation events, source retrieval, review, and revision lineage.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "https://example.com/authors/name#person",
"name": "Accountable Author",
"url": "https://example.com/authors/name"
},
{
"@type": "WebPage",
"@id": "https://example.com/report#webpage",
"url": "https://example.com/report",
"name": "Artifact title",
"mainEntity": { "@id": "https://example.com/report#article" }
},
{
"@type": ["TechArticle", "DigitalDocument"],
"@id": "https://example.com/report#article",
"mainEntityOfPage": { "@id": "https://example.com/report#webpage" },
"headline": "Artifact title",
"author": { "@id": "https://example.com/authors/name#person" },
"publisher": { "@id": "https://example.com/#publisher" },
"datePublished": "2026-07-21T18:48:00-04:00",
"dateModified": "2026-07-21T18:48:00-04:00",
"version": "2.0.0",
"creativeWorkStatus": "Published",
"isBasedOn": [{ "@id": "#primary-standard" }],
"citation": [{ "@id": "#supporting-source" }],
"correction": "https://example.com/report/corrections",
"license": "https://example.com/licenses/content",
"usageInfo": "https://example.com/content-usage",
"sdPublisher": { "@id": "https://example.com/#publisher" },
"sdDatePublished": "2026-07-21",
"sdLicense": "https://example.com/licenses/structured-data"
}
]
}WebPage describes the delivered page. TechArticle or another CreativeWork subtype describes the intellectual work. Connect them with mainEntity and mainEntityOfPage.isBasedOn only for derivationcitation, isBasedOn, and detailed provenance relationships semantically distinct.correction property when applicable. Keep creativeWorkStatus aligned with the visible status.A bibliography answers “what was consulted.” A claim ledger answers “what supports this statement, what kind of statement is it, and how confident are we?”
Readers should see the accountable author, generator, publication and review dates, version, status, source methodology, limitations, correction path, and verification state.
Model sources and revisions as entities, generation and review as activities, and people or software as agents. Relationships such as used, wasGeneratedBy, wasAttributedTo, and wasRevisionOf preserve audit detail without bloating public Schema.org markup. S7
A direct statement from an authoritative source or observed artifact.
A conclusion produced by connecting facts. Cite the supporting premises.
A direction chosen under stated constraints, alternatives, and trade-offs.
An uncertainty, missing source, implementation dependency, or unresolved decision.
{
"id": "C3",
"selector": "#content-credentials [data-claim='hard-binding']",
"claim": "An external HTML C2PA manifest binds to the entire stored document bytes.",
"kind": "fact",
"confidence": "high",
"sourceIds": ["S8"],
"review": {
"status": "verified-against-primary-source",
"reviewedAt": "2026-07-21T18:48:00-04:00"
}
}Response headers can reinforce identity, integrity, caching, and browser security. They complement—not replace—the artifact’s semantic and provenance layers.
HTTP/2 200
Content-Type: text/html; charset=utf-8
Content-Language: en-US
Last-Modified: Tue, 21 Jul 2026 22:48:00 GMT
ETag: "sha256-build-2.1.0"
Cache-Control: public, max-age=300, stale-while-revalidate=86400
Link: <https://example.com/report>; rel="canonical"
Link: <https://example.com/report/v/2.1.0>; rel="cite-as"
Link: <https://example.com/report/v/2.1.0.c2pa>; rel="c2pa-manifest"; type="application/c2pa"
Content-Digest: sha-256=:BASE64_DIGEST:
Content-Security-Policy: default-src 'self'; img-src 'self' https: data:; object-src 'none'; base-uri 'none'
Permissions-Policy: camera=(), microphone=(), geolocation=()
Referrer-Policy: strict-origin-when-cross-origin
X-Content-Type-Options: nosniffContent-Digest and Repr-Digest communicate hashes for HTTP content or representations. They detect changes when a trusted expected digest is available. S11
RFC 9421 signs selected HTTP message components and can include a digest field. It authenticates delivery assertions, not the full editorial lineage of the work. S12
A downloadable SHA-256 file is useful for transport verification only when the expected checksum is obtained through a trusted channel. It is not a signer identity.
An ETag is primarily a cache validator. Its format is server-defined and it should not be presented as cryptographic provenance.
C2PA 2.4 provides native HTML association, AI disclosure, and cryptographic binding. The workflow is strict because the document is treated as stored bytes, not as a normalized DOM.
C2PA 2.4 allows either one link rel="c2pa-manifest" or one inline script type="application/c2pa". More than one association is invalid. The specification prefers the external form. S8
Content Credentials establish that assertions are associated with an asset, signed, and tamper-evident. They do not independently establish that every assertion or the depicted content is true. S9
Resolve content, metadata, sources, visible provenance, rights, and lifecycle status.
Minify, inject production scripts, normalize line endings, set absolute URLs, and complete edge or CDN modifications.
For an external manifest, C2PA hashes the entire stored HTML document with no exclusion range. Reserialization changes the binding. S8
Include relevant actions, ingredients, digital source type, AI disclosure, signer identity, and timestamps according to policy.
Fetch the deployed URL through the real CDN path and validate the manifest against the response bytes.
C2PA 2.4 introduces c2pa.ai-disclosure to carry verifiable AI transparency information and complement actions and digital source type. S8
A page-level credential does not replace provenance for generated share cards, charts, screenshots, audio, or video used as ingredients.
Durable Content Credentials can use soft bindings such as fingerprints or watermarks to rediscover provenance when a manifest is separated. S9
Sharing a public URL does not imply permission for every downstream use. Rights signals need their own explicit policy and maturity labels.
| Signal | Controls | Mechanism | What it does not do | Maturity |
|---|---|---|---|---|
| Access control | Who can retrieve the content | Authentication, authorization, network policy | A public metadata tag cannot secure private content. | Established |
| Crawler access | Which cooperative crawlers may request URLs | robots.txt | Not an indexing guarantee, security boundary, license, or downstream usage grant. S15 | Established |
| Indexing and snippets | Search indexing and presentation | robots meta, X-Robots-Tag, data-nosnippet | Does not express licensing or AI training preferences. | Established |
| Copyright license | Permitted reuse under legal terms | rel=license, Schema.org license, visible terms | Metadata alone may not satisfy every legal or contractual requirement. | Established |
| TDM reservation | Reservation of text and data mining rights and policy discovery | W3C TDMRep | It is a Community Group report and must be evaluated against applicable law and platform support. | Final CG report |
| AI usage preference | Preferences for automated processing uses | IETF AIPREF vocabulary and attachment work | It is not yet a published RFC and should not be treated as a settled standard. | Internet-Draft |
| Provenance | History, responsibility, transformations | Visible ledger, PROV-O, Content Credentials | Does not itself grant permission for reuse. | Mixed mechanisms |
The W3C Community Group final report defines a protocol for reserving text and data mining rights and discovering licensing policies. S13
The working group is standardizing vocabulary and attachment mechanisms, but the current vocabulary is an Internet-Draft. Architect an extension point; do not hard-code it as final. S14
Do not publish proprietary tags as if they were interoperable standards. Label vendor-specific signals and experimental drafts explicitly.
One URL should orient readers to the current work. Another should preserve the exact revision that was cited, reviewed, hashed, or signed.
Current version, human sharing, search discovery, and the stable product identity.
Exact citation, historical audit, source ledger, checksum, and Content Credential binding.
Use cite-as, latest-version, predecessor-version, successor-version, version-history, and deprecation where they match the lifecycle. S10
Preserve the original revision, publish a correction record, update the latest pointer, and connect versions in the evidence graph.
Track created, first published, materially modified, structured-data published, reviewed, signed, and superseded timestamps separately.
<link rel="canonical" href="https://example.com/report/v/2.1.0">
<link rel="cite-as" href="https://example.com/report/v/2.1.0">
<link rel="latest-version" href="https://example.com/report">
<link rel="predecessor-version" href="https://example.com/report/v/1.4.0">
<link rel="version-history" href="https://example.com/report/history">Separate the knowledge model from its presentation. The same canonical record should render HTML metadata, JSON-LD, visible provenance, source ledgers, HTTP headers, and signing assertions.
type Maturity = "draft" | "shared" | "public" | "verifiable";
type ClaimKind = "fact" | "observation" | "analysis" | "recommendation" | "prediction" | "limitation";
interface PublicationArtifact {
schemaVersion: "2.0";
profile: Maturity;
identity: {
id: string;
workUrl: string;
revisionUrl: string;
citeAsUrl: string;
version: string;
status: "draft" | "reviewed" | "published" | "corrected" | "superseded";
title: string;
description: string;
language: string;
};
responsibility: {
author: Party;
publisher: Party;
generator?: SoftwareAgent;
reviewers: Party[];
humanOversight: "none" | "sampled" | "reviewed" | "approved";
};
lifecycle: {
createdAt: string;
publishedAt?: string;
modifiedAt: string;
reviewedAt?: string;
signedAt?: string;
supersedes?: string;
supersededBy?: string;
correctionUrl?: string;
};
preview: {
imageUrl: string;
imageAlt: string;
width: 1200;
height: 630;
};
evidence: {
sources: SourceRecord[];
claims: ClaimRecord[];
methodologyUrl?: string;
limitations: string[];
};
rights: {
licenseUrl?: string;
usageInfoUrl?: string;
tdmPolicyUrl?: string;
aiPreferences?: Array<{
vocabulary: string;
maturity: "stable" | "emerging" | "vendor-specific";
value: unknown;
}>;
};
integrity: {
contentDigest?: string;
httpSignature?: SignatureRecord;
c2pa?: {
manifestUrl: string;
signer: string;
verifiedAt: string;
verificationResult: "valid" | "invalid" | "inaccessible";
};
};
build: {
buildId: string;
sourceCommit?: string;
environment: "development" | "preview" | "production";
finalByteDigest?: string;
};
}Schema, required fields, URL policy, dates, claim coverage.
HTML head and route-specific initial response.
Schema.org and evidence sidecars.
Visible provenance, limitations, correction path.
Headers, caching, CSP, access policy.
Final bytes and asset ingredients when required.
Public delivery, preview rendering, digest, credential.
The validation pipeline should fail closed when required identity, evidence, rights, or verification fields are missing. Use progressive rigor rather than pretending every draft needs the same controls.
noindex where publicly accessible but not publishable.Inspect raw HTML without JavaScript. Share crawlers must receive the final route’s metadata.
Yes. Validate signer trust and assertion meaning; do not reduce the experience to a green check.
Yes. Source URLs, prompts, model endpoints, reviewer identities, build IDs, and internal paths need disclosure policy.
The visible record below mirrors the embedded JSON-LD and claim ledger. It does not claim a Content Credential because no C2PA manifest has been generated or verified.
Research rebuilt against current primary standards and clearly separated into established, optional, and emerging mechanisms.
The embedded ledger contains the same claims in machine-readable form.
A shareable SPA should expose route-specific metadata in the initial HTML response rather than relying only on post-hydration mutation. S2S3S4
C2PA 2.4 defines native HTML association through one external link or one inline application/c2pa script; external association is preferred. S8
For an external C2PA manifest, the hard binding covers the entire stored HTML byte representation, so reserialization can invalidate verification. S8
Content Credentials establish tamper-evident provenance signals; they do not independently establish that content is true or complete. S9
Schema.org 30.0 is the current stable release used as the semantic baseline in this artifact. S5
HTTP digest fields communicate integrity digests, while HTTP Message Signatures authenticate selected HTTP message components; neither replaces content-level provenance. S11S12S8
TDMRep is a finalized W3C Community Group report, while IETF AI Preferences remains an Internet-Draft and should be labeled emerging. S13S14
Crawler access controls, indexing controls, downstream usage preferences, licensing, and provenance are separate policy planes. S13S14S15S8
Component-level contrast validation is a mandatory release gate: normal text meets 4.5:1, large text and meaningful non-text UI meet 3:1, and focus indicators remain contrasted against adjacent colors. S17S18S19
Research prioritizes normative specifications, standards bodies, and official platform documentation. Emerging work is labeled as work in progress.