Skip to content

Prove you own your domain

Enter your site address as a bare host namestorefront.example. A scheme, a trailing slash and a trailing dot are cleaned up for you. A port, an @, or anything that is not a host name is refused, because that value is published verbatim inside your structured data and it has to name your site and nothing else.

Geoffy gives you a verification token. Serve it at:

https://yourdomain.com/.well-known/geoffy-site-verification.txt

Put the file at public/.well-known/geoffy-site-verification.txt, then run the check in Geoffy.

This check runs in the opposite direction to everything else

Every other request in these guides is your site fetching Geoffy. This one is Geoffy fetching your site. So it needs an address Geoffy can actually reach: https, on the default port, on a public host name. A local address is refused rather than attempted.

That gives you two paths, and the first is the normal one:

  • Your site is already live. Deploy the one verification file and run the check. Nothing else has to ship, and you need no tunnel. You can then develop locally against that same site key for as long as you like.
  • Your site is not live yet. Put a temporary public https address in front of your dev server:
Terminal window
cloudflared tunnel --config /dev/null --url http://localhost:3000

Enter the tunnel's host name as your site address, verify, and carry on. Swap it for your real domain before you go live — the address is published verbatim inside your structured data.

Geoffy publishes its structured data against your canonical URL. If that URL denies being the product, the data points at a page that contradicts it, and Geoffy refuses to publish rather than emit it.

Open any product page’s source and look for <link rel="canonical">. It must point at that product, not at your home page.

app/[lang]/products/[handle]/page.tsx
export async function generateMetadata({ params }) {
const { lang, handle } = await params;
return {
alternates: {
canonical: `https://yourdomain.com/${lang}/products/${handle}`,
},
};
}

Pass that same value as canonicalUrl to <GeoffyProduct> rather than building it twice.