Skip to content

Troubleshooting

Indexed by symptom, because you know the symptom and not the cause. Several of these fail in ways that look like success.

Missing export const prerender = false. A prerendered dynamic route with no getStaticPaths() fails the build outright, and Astro prerenders by default. The Geoffy namespace.

This one is at least loud. The next entry is the same mistake, quiet.

The namespace works in astro dev and not in production

Section titled “The namespace works in astro dev and not in production”

astro dev renders every route on demand, so a missing prerender = false is invisible there. Run astro build && astro previewpreview serves the real output. Testing locally.

CauseFix
Ownership is not verifiedEvery artifact endpoint 404s until it passes. Prove you own your domain
Nothing is published for that handleThe endpoints serve published bundles only. Publish in the dashboard first
Wrong handleWith no commerce platform it is the segment your URL pattern captured, not your slug. The product page
canonicalUrl does not matchThe helper returns null and your guards render nothing. There is no marker on this side — check the handle first
The page was prerendered before you publishedStatic builds bake the markup in. How updates arrive

The structured data is in the body, not the head

Section titled “The structured data is in the body, not the head”

Your Layout.astro does not declare <slot name="head" /> inside its <head>, so the fragment falls through into the body. It still verifies and is still read, so fix it when convenient. Where to put the markup.

Something is stripping the <style> element that travels inside widgetHtml — reaching for a sanitiser instead of set:html, most often.

A static public/robots.txt wins over src/pages/robots.txt.ts. Delete it. This is the single most common cause of “I added the route and nothing happened”. Crawler rules.

My robots.txt has no Sitemap: line for Geoffy

Section titled “My robots.txt has no Sitemap: line for Geoffy”

On a static build the file is generated once, at build time, and the line is withheld until the namespace is mounted. So you built before mounting. Mount first, then deploy.

createGeoffyTextEndpoint refuses robots-rules.txt

Section titled “createGeoffyTextEndpoint refuses robots-rules.txt”

Deliberately. It serves whole files; the robots rules are a fragment you append to yours. Crawler rules.

If you are fully static, that is the answer: content appears at your next build, and there is no deploy hook or acceleration. If you are server-rendered, it is the cache window — one hour by default. How updates arrive.

The mount is reported as not done, but the URL works in my browser

Section titled “The mount is reported as not done, but the URL works in my browser”

A 200 is not the check. Three things must be true, and a catch-all answering with your home page satisfies none of them. Checking it worked.

wrong_site means our marker came back carrying a different site key — your GEOFFY_SITE_KEY belongs to another Geoffy site.

Products index slowly, and nothing is wrong

Section titled “Products index slowly, and nothing is wrong”

Probably the IndexNow key. The namespace authorises only what is under /apps/geoffy/, so product-page pings are discarded unless you also serve public/{key}.txt. Nothing errors when you skip it. The IndexNow key.

It is read from process.env, which an edge runtime does not have. Pass origin alongside siteKey instead. A value that is not an absolute http/https URL is also ignored, with no error, so a typo looks the same as this.

Check what your own site is actually serving:

Terminal window
curl -si https://yourdomain.com/apps/geoffy/sitemap.xml | head -20
curl -s https://yourdomain.com/your/product/page | grep -c 'data-geoffy'
curl -s https://yourdomain.com/llms.txt | head -20

Then compare against the source. Your site’s settings in Geoffy show the direct URL for each of your published surfaces; fetching one bypasses every cache of yours at once. If Geoffy and your site disagree, the problem is on your side of the fetch.