You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The sitemap is now live and submitted to Google Search Console (#1252, #1313), so Google can discover our ~718 pages — but a sitemap doesn't affect ranking or how pages appear in results. The on-page metadata our templates emit is where the actual improvements live: accurate search snippets, correct canonicalization, and rich results. This issue audits what we emit today and fills the gaps.
Current state (quick audit, 2026-06-17)
Already in good shape:
Page titles — 10 of 11 page templates override {% block pagetitle %} (defined in website/templates/website/base.html:107), so most pages get a descriptive … | Makeability Lab title rather than the generic url_name fallback. (Audit should still spot-check title content for uniqueness/length, and catch pages that fall back — e.g. view_project_people.html hardcodes its own <title>Project People Viewer</title>.)
Open Graph — project.html, news_item.html, and member.html emit a fairly complete OG set (og:title/type/description/image/url, plus article:published_time, profile:first_name). Social-share previews are decent.
Gaps to address:
No per-page <meta name="description">. Only one site-wide description exists (base.html:59); detail pages set og:description but not the standard meta description, so Google's snippet source is identical on every page. Add per-page descriptions sourced from real fields (person bio, project summary, news excerpt, publication abstract).
No structured data (JSON-LD / schema.org) anywhere (grep for application/ld+json / itemtype returns nothing). Biggest opportunity for an academic lab. Candidates:
Publications → ScholarlyArticle (authors, datePublished, venue, PDF URL)
People → Person (affiliation, jobTitle, sameAs links to Scholar/ORCID/etc.)
Lab/site → Organization / university affiliation
News → Article / NewsArticle
Listing pages → BreadcrumbList / ItemList
No rel=\"canonical\". Especially relevant because the same view is served at both/projects/<name>/ and /project/<name>/ (documented in CLAUDE.md). Without a canonical tag that's duplicate-content dilution. Add canonicals (project pages first).
No Twitter Card tags (twitter:card, etc.). OG partially covers Twitter via fallback, but an explicit summary_large_image improves X/Twitter previews. Low priority.
Minor / verify:og:description appears more than once in some templates (project.html, news_item.html, member.html) — likely {% if %}/{% else %} branches; confirm they're mutually exclusive and not double-emitted.
Proposed approach
Audit-first: enumerate every page type and record title / description / canonical / OG / structured-data status in a table (in this issue).
Then implement in small PRs, each its own branch per repo convention — likely:
Motivation
The sitemap is now live and submitted to Google Search Console (#1252, #1313), so Google can discover our ~718 pages — but a sitemap doesn't affect ranking or how pages appear in results. The on-page metadata our templates emit is where the actual improvements live: accurate search snippets, correct canonicalization, and rich results. This issue audits what we emit today and fills the gaps.
Current state (quick audit, 2026-06-17)
Already in good shape:
{% block pagetitle %}(defined inwebsite/templates/website/base.html:107), so most pages get a descriptive… | Makeability Labtitle rather than the genericurl_namefallback. (Audit should still spot-check title content for uniqueness/length, and catch pages that fall back — e.g.view_project_people.htmlhardcodes its own<title>Project People Viewer</title>.)project.html,news_item.html, andmember.htmlemit a fairly complete OG set (og:title/type/description/image/url, plusarticle:published_time,profile:first_name). Social-share previews are decent.Gaps to address:
No per-page
<meta name="description">. Only one site-wide description exists (base.html:59); detail pages setog:descriptionbut not the standard meta description, so Google's snippet source is identical on every page. Add per-page descriptions sourced from real fields (person bio, project summary, news excerpt, publication abstract).No structured data (JSON-LD / schema.org) anywhere (
grepforapplication/ld+json/itemtypereturns nothing). Biggest opportunity for an academic lab. Candidates:ScholarlyArticle(authors,datePublished, venue, PDF URL)Person(affiliation,jobTitle,sameAslinks to Scholar/ORCID/etc.)Organization/ university affiliationArticle/NewsArticleBreadcrumbList/ItemListNo
rel=\"canonical\". Especially relevant because the same view is served at both/projects/<name>/and/project/<name>/(documented in CLAUDE.md). Without a canonical tag that's duplicate-content dilution. Add canonicals (project pages first).No Twitter Card tags (
twitter:card, etc.). OG partially covers Twitter via fallback, but an explicitsummary_large_imageimproves X/Twitter previews. Low priority.Minor / verify:
og:descriptionappears more than once in some templates (project.html,news_item.html,member.html) — likely{% if %}/{% else %}branches; confirm they're mutually exclusive and not double-emitted.Proposed approach
<meta name="description">+rel="canonical"Constraints
Definition of done (audit portion)
Filed as the on-page-SEO complement to the sitemap work (#1252, #1313).