Skip to content

CE: Add OG/Twitter meta tags + expand sitemap#307

Merged
ericflo merged 1 commit intomainfrom
ce/seo-meta-tags-and-sitemap
Apr 16, 2026
Merged

CE: Add OG/Twitter meta tags + expand sitemap#307
ericflo merged 1 commit intomainfrom
ce/seo-meta-tags-and-sitemap

Conversation

@ericflo
Copy link
Copy Markdown
Owner

@ericflo ericflo commented Apr 16, 2026

What

  • Adds meta description, og:title/description/type/url, twitter:card/title/description to page_shell_custom — fixes signup, login, setup, integrate, dashboard, and 404 sharing previews
  • Adds /setup and /integrate to sitemap.xml
  • Updates sitemap route test to assert all six URLs

Why

Live curl confirmed signup/login/pricing had 0 OG tags — sharing them on Twitter/Slack/LinkedIn rendered as bare URLs. Sitemap also missed two public-friendly pages.

Verification (post-deploy)

  • curl -s https://modelrelay.io/signup | grep -c og: should return >= 5
  • curl -s https://modelrelay.io/sitemap.xml | grep -c '<url>' should return 6

Notes

  • Used a shared description/og:url so every page inheriting page_shell_custom gets baseline social previews; per-page customization can come later if Eric wants fine-tuned og:url per route.
  • cargo test -p modelrelay-web -p modelrelay-cloud passes locally.

@ericflo ericflo merged commit 58e9928 into main Apr 16, 2026
12 checks passed
@ericflo ericflo deleted the ce/seo-meta-tags-and-sitemap branch April 16, 2026 15:22
ericflo pushed a commit that referenced this pull request Apr 16, 2026
PR #307 added og:url and related meta tags through page_shell but hardcoded
og:url to https://modelrelay.io/ (root) for every non-root page, and omitted
<link rel="canonical"> entirely. That meant /login, /signup, /pricing, /setup,
and /integrate all claimed root as their og:url and had no canonical link.

- Thread request path through page_shell() and page_shell_custom(), render
  per-page og:url and canonical as https://modelrelay.io{path}.
- Update every call site across modelrelay-web and modelrelay-cloud to pass
  the route's path. Dynamic paths (e.g. /dashboard/keys/{id}/revoke) are
  built via format!.
- Add og:url + canonical for /pricing directly to its static template.
- Update the static landing index.html to use https://modelrelay.io/ with a
  trailing slash so it matches the page_shell convention.
- Add integration tests asserting /, /login, /signup, /pricing, and
  /checkout/cancel each render og:url and canonical containing their path.
ericflo added a commit that referenced this pull request Apr 16, 2026
PR #307 added og:url and related meta tags through page_shell but hardcoded
og:url to https://modelrelay.io/ (root) for every non-root page, and omitted
<link rel="canonical"> entirely. That meant /login, /signup, /pricing, /setup,
and /integrate all claimed root as their og:url and had no canonical link.

- Thread request path through page_shell() and page_shell_custom(), render
  per-page og:url and canonical as https://modelrelay.io{path}.
- Update every call site across modelrelay-web and modelrelay-cloud to pass
  the route's path. Dynamic paths (e.g. /dashboard/keys/{id}/revoke) are
  built via format!.
- Add og:url + canonical for /pricing directly to its static template.
- Update the static landing index.html to use https://modelrelay.io/ with a
  trailing slash so it matches the page_shell convention.
- Add integration tests asserting /, /login, /signup, /pricing, and
  /checkout/cancel each render og:url and canonical containing their path.

Co-authored-by: Cloud Eric <clouderic@eflorenzano.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant