seo(jsonld): initialize author profiles#17988
Conversation
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>
✅ Deploy Preview for ethereumorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
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>
- 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>
| authorIds: | ||
| entities.length > 0 | ||
| ? entities.map((e) => ({ "@id": e["@id"] })) | ||
| : [REFERENCE.ETHEREUM_COMMUNITY], |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
@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.
There was a problem hiding this comment.
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.
4f2f59c to
885d1a7
Compare
c1c16b2 to
e9af6f3
Compare
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
|
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. |

Description
authors) or direct importsauthorfields through an auto-generated alias map (full name or GitHub handle)Testing plan