[og] Route crawlers via middleware, not a rewrite

The OG function deployed and worked (`/api/og?v=<nevent>` returns the real
title, description, thumbnail and player card), but crawlers hitting
`/?v=<nevent>` still got the site-wide card: Vercel evaluates `rewrites` AFTER
the filesystem, and `/` matches the static index.html, so the rewrite never
fired.

Middleware runs before the filesystem check, so that is where the routing
belongs. Replace the dead `rewrites` block with a root middleware that matches
only `/`, bails immediately when there is no `v` param or the user-agent is not
a known preview crawler, and otherwise rewrites to /api/og.

Real viewers are unaffected -- they fall through to the untouched SPA. Note the
one behavioral difference from the rewrite design: middleware now executes on
homepage requests (matcher is `/` only) rather than being invoked solely for
crawlers. It returns next() after two cheap checks.

Verified on the live unstable deployment that /api/og already renders
`x-bitvid-og: video` with og:type video.other for the real note; this only
fixes how crawlers reach it.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
thePR0M3TH3ANandClaude Opus 5 committed 2026-07-28 14:40:20 -04:00
1 parent e5784893a8
commit 04075ff56b
4 files changed
+63 -17

No files matched your search

+1
View File
@@ -85,6 +85,7 @@
"dependencies": {
"@floating-ui/dom": "^1.7.4",
"@tailwindcss/typography": "^0.5.19",
"@vercel/edge": "^1.3.1",
"autoprefixer": "^10.4.24",
"cross-env": "^10.1.0",
"esbuild": "^0.27.3",