From 8a33c094b4ab52d3a93c3d3ba26cdf2eb5bba034 Mon Sep 17 00:00:00 2001
From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com>
Date: Wed, 19 Aug 2026 23:15:29 +0100
Subject: [PATCH] chore(www): add /evals to the sitemap (#49226)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
_Requested by **Sean Oliver** · [Slack
thread](https://supabase.slack.com/archives/C07P3AU3J2D/p1787036390117589?thread_ts=1787036390.117589&cid=C07P3AU3J2D)_
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.
YES
## What kind of change does this PR introduce?
Chore. One entry added to the www sitemap generator.
## What is the current behavior?
`https://supabase.com/evals` is missing from `sitemap_www.xml`, so
search crawlers are never told the page exists. `robots.txt` doesn't
block it, they just have no way to find it from the sitemap.
The reason is that `/evals` is served by a separate Vercel project and
only reaches supabase.com through a proxy rewrite in
`apps/www/lib/rewrites.js`:
```js
{
source: '/evals',
destination: 'https://supabase-evals.vercel.app',
},
```
`apps/www/internals/generate-sitemap.mjs` builds its URL list by
globbing local route source files (`pages/**`, `_blog/*.mdx`,
prerendered `.next/server/pages/**`, etc.) and never resolves rewrites.
There is no page file behind `/evals`, so the globs can't discover it.
Closes GROWTH-1113.
## What is the new behavior?
`https://supabase.com/evals` appears once in the generated
`sitemap_www.xml`, with the same `weekly` and
`0.5` as every other entry in the file (no entry in
this sitemap carries a ``).
The entry is a small named const spread into the final `urlset` join,
next to `changelogDetailUrls` — the existing precedent in this file for
URLs with no page file behind them. Nothing else in the script changed,
and the sitemap index output (`sitemap.xml`) is byte-identical.
```diff
+ // /evals is a separate app proxied onto supabase.com via a rewrite in lib/rewrites.js,
+ // so it has no page file for the globs above to find. Hardcode it here.
+ const proxiedAppUrls = [
+ `
+
+ https://supabase.com/evals
+ weekly
+ 0.5
+
+ `,
+ ]
+
const sitemap = `
- ${[...staticUrls, ...changelogDetailUrls].join('')}
+ ${[...staticUrls, ...changelogDetailUrls, ...proxiedAppUrls].join('')}
`
```
This only makes the URL discoverable. Whether the page content itself is
crawlable is separate work, tracked in the evals repo.
## Additional context
Verification, run locally against this branch. The generator runs
standalone (`node ./internals/generate-sitemap.mjs` from `apps/www`); a
missing `.next` just means the globs match fewer pages, and the missing
changelog RSS is caught internally.
I generated `sitemap_www.xml` from `master` and from this branch and
diffed the two. The added entry is the only difference:
```
3271a3272,3277
>
>
> https://supabase.com/evals
> weekly
> 0.5
>
```
Exactly one occurrence, with its neighbouring entry for context:
```
$ grep -c 'https://supabase.com/evals' public/sitemap_www.xml
1
https://supabase.com/terms
weekly
0.5
https://supabase.com/evals
weekly
0.5
```
Other checks:
- Both outputs parse as well-formed XML (Python `xml.dom.minidom`):
`sitemap_www.xml` has 545 `` elements, `sitemap.xml` parses OK.
- `sitemap.xml` (the sitemap index) is identical to the pre-change
output; `diff` reports no changes.
- `npx prettier --check internals/generate-sitemap.mjs` → "All matched
files use Prettier code style!"
- Both generated sitemaps are gitignored (`apps/www/.gitignore` lines
29-30), confirmed with `git check-ignore`. `git status` shows only
`apps/www/internals/generate-sitemap.mjs`, so no generated file is in
the commit.
- No test, snapshot, or fixture anywhere in the repo references the
sitemap generator, so there was nothing to run. Its only caller is
`apps/www`'s `postbuild` script.
Not run: `pnpm --filter=www build`. It fails during "Collecting page
data" on a clean `master` checkout in this environment too, so the
failure is pre-existing and unrelated, and this change needs no build to
verify.
Co-authored-by: Claude
---
apps/www/internals/generate-sitemap.mjs | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/apps/www/internals/generate-sitemap.mjs b/apps/www/internals/generate-sitemap.mjs
index af7aa31cd73..939c6be54d1 100644
--- a/apps/www/internals/generate-sitemap.mjs
+++ b/apps/www/internals/generate-sitemap.mjs
@@ -139,10 +139,22 @@ async function generate() {
}
})()
+ // /evals is a separate app proxied onto supabase.com via a rewrite in lib/rewrites.js,
+ // so it has no page file for the globs above to find. Hardcode it here.
+ const proxiedAppUrls = [
+ `
+
+ https://supabase.com/evals
+ weekly
+ 0.5
+
+ `,
+ ]
+
const sitemap = `
- ${[...staticUrls, ...changelogDetailUrls].join('')}
+ ${[...staticUrls, ...changelogDetailUrls, ...proxiedAppUrls].join('')}
`