The Geoffy namespace
Geoffy has more surfaces than the three root files: a plain-text twin for every product, a sitemap of them, and your buying-guide pages. They all live under one namespace, and this single endpoint puts the whole of it on your domain.
import { createGeoffyProxyEndpoint } from "@geoffy/headless/astro";
export const prerender = false; // required: see belowexport const GET = createGeoffyProxyEndpoint({ siteKey: import.meta.env.GEOFFY_SITE_KEY });You now serve:
Directoryapps/
Directorygeoffy/
Directoryllm/
- {page path}.md each page, as plain text, at its own path (no commerce platform)
- {handle}.md each product, as plain text (Shopify behind your storefront)
Directoryguides/
- {slug} each published buying guide
- {slug}.md the same guide, as plain text
- sitemap.xml all of the above, listed
You need on-demand rendering
Section titled “You need on-demand rendering”An adapter and output: "server", or Astro’s default plus prerender = false here. A
fully prerendered site cannot serve this route at all. Do not add the file, and your
content stays reachable at Geoffy’s own domain instead.
That is one of the two reasons how updates arrive recommends thinking about your build mode before you go further: going fully static costs you this route, and this route is what puts your content on your own domain.
Why this is worth a route
Section titled “Why this is worth a route”Without it, that content is still served, but from api.geoffy.ai, not from you.
An AI system that reads your buying guide there records api.geoffy.ai as the source, so the citation your guide earns goes to us instead of to you.
Why a namespace and not three more helpers
Section titled “Why a namespace and not three more helpers”It is the last integration change this package will ask you for. Anything Geoffy adds later appears under the namespace you have already mounted: no upgrade, no new file, no re-deploy on your side.
Behaviours worth knowing
Section titled “Behaviours worth knowing”They show up in your own logs, so it is worth knowing they are deliberate.
- If Geoffy is unreachable or erroring, this endpoint answers 503 with a
Retry-After, never a fabricated 404, so a crawler retries instead of dropping the page from its index. - Query strings are not forwarded, because no artifact reads one.
- It tells Geoffy which AI agent asked for a file, by the agent's name
(
GPTBot). A browser's user agent is never passed on. That is how Geoffy can show you which agents read your product text versions and guides, even without AI visit tracking. - Each plain-text twin names its HTML page as canonical. A product or
page twin under
llm/, or aguides/{slug}.mdtwin, carriesLink: <https://…>; rel="canonical". It names your product page, or the buying guide, on your domain. A search engine that indexes the twin then gives the credit to that page. This needs 0.3.3 or later. - Geoffy's
X-Robots-Tagis kept. When Geoffy marks a responsenoindex,nofollowornone, the endpoint keeps that header on a 200 and on a 404. No other header from Geoffy is copied, and a value in an unexpected shape is dropped. This needs 0.3.3 or later. - A moved buying guide answers 301. When a guide gets a new address, its old
address answers
301with aLocationunder/apps/geoffy/on your domain, never one on Geoffy's domain.
Until you add it
Section titled “Until you add it”Geoffy notices and simply says less: your llms.txt will not advertise the twins or the
sitemap, rather than pointing a crawler at pages that are not there. Confirming the mount
is covered in checking it worked.