Problem
src/layouts/BaseLayout.astro currently sets only <title>, <meta charset>, and viewport. Missing:
<meta name="description">
- Open Graph tags (
og:title, og:description, og:image, og:url, og:type)
- Twitter card tags (
twitter:card, twitter:title, twitter:description, twitter:image)
- Canonical URL (
<link rel="canonical">)
This means link previews on Slack/Discord/LinkedIn/Twitter fall back to bare URL + title, and search engines have no description snippet to render.
Proposal
Extend BaseLayout to accept optional description and image props (with sensible defaults pulled from siteResources), and emit the full set of meta tags. Use Astro.url for canonical/og:url so it works across environments.
A static OG image (e.g., /images/og-cover.png, 1200×630) should be added to public/images/.
Acceptance
BaseLayout emits description, OG, Twitter, and canonical tags.
- A default OG image exists in
public/images/.
- Verified with a link-preview debugger (e.g., opengraph.xyz or Slack unfurl) once deployed.
Problem
src/layouts/BaseLayout.astrocurrently sets only<title>,<meta charset>, and viewport. Missing:<meta name="description">og:title,og:description,og:image,og:url,og:type)twitter:card,twitter:title,twitter:description,twitter:image)<link rel="canonical">)This means link previews on Slack/Discord/LinkedIn/Twitter fall back to bare URL + title, and search engines have no description snippet to render.
Proposal
Extend
BaseLayoutto accept optionaldescriptionandimageprops (with sensible defaults pulled fromsiteResources), and emit the full set of meta tags. UseAstro.urlfor canonical/og:url so it works across environments.A static OG image (e.g.,
/images/og-cover.png, 1200×630) should be added topublic/images/.Acceptance
BaseLayoutemits description, OG, Twitter, and canonical tags.public/images/.