SEO/GenAI structured data + author profile page rebuild#784
Open
LukasWallrich wants to merge 1 commit into
Open
SEO/GenAI structured data + author profile page rebuild#784LukasWallrich wants to merge 1 commit into
LukasWallrich wants to merge 1 commit into
Conversation
Structured data (JSON-LD), built with the repo's dict + jsonify + safeJS convention for safe escaping: - DefinedTerm on glossary term pages (all languages, correct inLanguage) - Article on Educators' Corner posts - ScholarlyArticle/CollectionPage on the Summaries pages (DOIs are extracted from the stored references, never fabricated) - Person on substantive author profiles The proposed standalone meta-description partial was intentionally not added: the theme's site_head already emits description/og/twitter tags (including from a glossary term's definition), so it would only duplicate. Author profile pages were broken: content/authors/ was both a content section and the `authors` taxonomy, so every profile whose term slug matched its folder name was suppressed, and a junk `authors: - Name "X"` field in each profile mangled the remaining URLs and titles (pages showed up as `Name "..."` at /author/name-x/). ~250 such thin pages were in the sitemap, hurting SEO. Rebuild: - Disable the `author` taxonomy + permalink; render profiles as plain section pages at /authors/<slug>/. - Rewrite layouts/authors/list.html to render the profile (avatar, name, role, organization, social, bio, interests) plus the author's posts, and add an alphabetical authors index. - Strip the junk `authors:` field and add a proper `title:` across the 119 profiles. - Override page_metadata_authors.html so bylines slugify display names and link to the new /authors/<slug>/ URLs. - Noindex empty template-stub profiles (no bio/role/org/interests and no credited content) so they don't dilute search. Note: author URLs change from /author/name-<slug>/ to /authors/<slug>/. No internal links referenced the old URLs. SEO / GenAI optimisation advice by Keegan Vaz. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
|
👍 All image files/references (if any) are in webp format, in line with our policy. |
Contributor
✅ Spell Check PassedNo spelling issues found when checking 130 changed file(s)! 🎉 |
Contributor
Author
|
✅ Staging Deployment Status This PR has been successfully deployed to staging as part of an aggregated deployment. Deployed at: 2026-06-03 13:58:10 UTC The staging site shows the combined state of all compatible open PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds structured data (JSON-LD) across the site for richer search-engine and GenAI results, and rebuilds the author profile system, which was fundamentally broken.
SEO / GenAI optimisation advice by Keegan Vaz — thank you! 🙏
Part 1 — Structured data (JSON-LD)
All built with the repo's existing
dict+jsonify+safeJSconvention (as inclusters/seo_jsonld.html), which JSON-escapes values safely — rather than hand-written JSON string interpolation.DefinedTerminLanguage)ArticleScholarlyArticle/CollectionPagePersonOn DOIs: Summaries DOIs are extracted from the stored APA reference strings via regex — never fabricated. When a reference has no DOI, the field is omitted.
Not added — meta-description partial: the theme's
site_head.htmlalready emitsdescription/og:description/twitter:description(and even uses a glossary term'sdefinition), so a separate partial would only duplicate the tags.Part 2 — Author profile page rebuild
The problem
content/authors/was simultaneously a content section and theauthorstaxonomy (same name). Consequences:authors: - Name "X"field (a template copy-paste error) that mangled the surviving pages — they rendered at/author/name-<slug>/with titles literally readingName "...".The fix
authortaxonomy + its permalink; author profiles now render as plain section pages at/authors/<slug>/.layouts/authors/list.htmlto render the full profile (avatar, name, role, organization, social links, bio, real interests) plus an auto-generated list of that author's posts — and an alphabetical authors index at/authors/.authors:field and added a propertitle:across the 119 profiles.page_metadata_authors.htmlso bylines slugify display names and link to the new/authors/<slug>/URLs (previously they pointed at an empty/author/).Personschema; 60 empty stubs arenoindex, follow.Adding authors going forward
Drop a folder under
content/authors/<username>/with an_index.md(name, optionalrole/bio/organizations/social) and anavatarimage. No taxonomy quirks.Author URLs change from
/author/name-<slug>/→/authors/<slug>/. The old URLs were auto-generated and not referenced by any internal link (verified across content, layouts, data, static). If any are indexed/linked externally, we can addaliasesfor redirects.Verification
hugobuild is green./author/*pages gone (0 in sitemap); exactly onePersonper substantive profile (no theme duplicate).🤖 Generated with Claude Code