Skip to content

seo(jsonld): initialize author profiles#17988

Merged
wackerow merged 16 commits into
devfrom
jsonld-authors
Apr 24, 2026
Merged

seo(jsonld): initialize author profiles#17988
wackerow merged 16 commits into
devfrom
jsonld-authors

Conversation

@myelinated-wackerow
Copy link
Copy Markdown
Collaborator

Description

  • Adds a registry of schema.org Person profiles and resolves them into page JSON-LD via frontmatter (authors) or direct imports
  • Works with legacy author fields through an auto-generated alias map (full name or GitHub handle)
  • Falls back to the community organization when no author is declared
  • Author attribution strengthens E-E-A-T and author-credibility signals for search engines and LLM citation
  • Registry will expand iteratively over time

Testing plan

myelinated-wackerow and others added 4 commits April 17, 2026 13:03
Adds schema.org Person profiles for JSON-LD author attribution, with auto-generated alias resolution (display name + GitHub handle) and helpers for normalizing frontmatter author fields.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
- Add authors?: string | string[] to SharedFrontmatter
- Catch-all [...slug] route resolves authors from frontmatter
  (supports new authors array or legacy author string via alias map),
  falls back to community organization
- Hardcode Fredrik Svantes on /bug-bounty/
- Hardcode Josh Stark and Fredrik Svantes on /trillion-dollar-security/

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Attribute known authors via frontmatter for JSON-LD resolution

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 17, 2026

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 0ce4532
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/69eae7b90db04b000895e58d
😎 Deploy Preview https://deploy-preview-17988.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 59 (🟢 up 1 from production)
Accessibility: 93 (no change from production)
Best Practices: 100 (no change from production)
SEO: 98 (🔴 down 1 from production)
PWA: 59 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added content 🖋️ This involves copy additions or edits tooling 🔧 Changes related to tooling of the project labels Apr 17, 2026
myelinated-wackerow and others added 3 commits April 17, 2026 13:43
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
- Add Anders Brownworth to KNOWN_PERSONS
- New KNOWN_ORGANIZATIONS registry: Bankless, Finematics, EthBoulder,
  EthCC, ETHDenver, Web3Privacy Now
- Resolver handles both Persons and Organizations via shared alias map;
  EF and community orgs also resolve by name
- Case-insensitive author matching
- Video watch page resolves frontmatter author to a known entity or
  anonymous Person; removed misleading EF publisher

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
myelinated-wackerow and others added 4 commits April 21, 2026 22:04
- Include KNOWN_PERSONS / KNOWN_ORGANIZATIONS profile keys in the
  alias map so every alias type (key, display name, GitHub handle)
  resolves via a single ENTITY_ALIASES lookup.
- Simplify resolveAuthorsFromFrontmatter to one map access instead of
  three fallthroughs.
- Detect alias collisions at module-init time; log via console.warn
  and Sentry.captureMessage("warning"). Keeps the first-seen entity.

EF and Community org entities are still matchable by display name and
GitHub handle, but do not get synthetic kebab-case keys.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Refactors Persons and Organizations to dedicated files
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Comment thread src/lib/jsonld/utils.ts Outdated
authorIds:
entities.length > 0
? entities.map((e) => ({ "@id": e["@id"] }))
: [REFERENCE.ETHEREUM_COMMUNITY],
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Silent fallback on unrecognized authors. Consider a dev-only console.warn (or Sentry breadcrumb) when a frontmatter value produces zero matches — otherwise authors will think they're attributed when they aren't

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay thanks!... As noted below, refactored this to always include the community as an author.

For the "unrecognized" author logging, I'd like to think on that a little... this could create a lot of noise, since currently there are many existing author entries that do no have entries in KNOWN_AUTHORS just yet. Will break that off as a separate task from this PR.

url: url,
inLanguage: locale,
author: [REFERENCE.ETHEREUM_COMMUNITY],
author: authorIds,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we keep the ETHEREUM_COMMUNITY ref always set as a default in md pages?

I'm asking because (if I'm not mistaken) setting authors: ["Andreas Antonopoulos"] in the glossary (public/content/glossary/index.md) incorrectly attributes the entire glossary to a single person.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pettinarip yeah good call.. Okay, @mnelsonBT please feel free to chime in, but in the meantime:

  • If we force "community" as a baseline contributor on all pages, we loose granularity
  • We can add "Ethereum Community" to the front matter authors list to include as needed when other authors are listed
  • If NO "authors" front matter available, falls back to community
  • I've updated the /glossary/ page to add "Ethereum Community" explicitly

So as examples, as of c1c16b2 the /whitepaper/ page will show Vitalik without the community as "author", but the /glossary/ page will show Andreas with the community.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, after chatting with @mnelsonBT -- going to revert c1c16b2 and KEEP the community as a baseline author. This is more accurate to the default case and there are very few exceptions where that may not be fully accurate (a couple pages max?)... Requiring the addition of "Ethereum Community" on each markdown page that include the "authors" front matter prop would add unnecessary burden, and risk that we do not include them, when the vast majority of cases it is the desired path. The risk of including on the couple pages that it may be less appropriate is minimal. Patch incoming.

myelinated-wackerow and others added 2 commits April 23, 2026 15:33
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
@wackerow
Copy link
Copy Markdown
Member

cc: @pettinarip and @mnelsonBT per conversations, going to bring this in for this release -- please let me know if any issues and I can iterate to fix separately.

@wackerow wackerow merged commit 6db03fb into dev Apr 24, 2026
11 checks passed
@wackerow wackerow deleted the jsonld-authors branch April 24, 2026 04:12
@wackerow wackerow mentioned this pull request Apr 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

content 🖋️ This involves copy additions or edits tooling 🔧 Changes related to tooling of the project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants