Link-rel Reference Guide
Learn how to reference your generated files in your website's HTML head using link-rel tags.
Each Geordy-generated file is referenced in your website's <head> via link-rel tags. This is the bridge between your live site and its structured data files — it tells AI crawlers exactly where to look.
How file paths work
Geordy generates files whose paths mirror your existing site structure. The base is always your Geordy subdomain (e.g. ai.yourdomain.com) or Geordy's hosted address (files.geordy.ai/yourdomain.com). Two files live at the root only: llms.txt and humans.txt. All other formats use an index.* naming convention for the homepage, and mirror your page path for inner pages.
Root-only files (homepage)
https://ai.yourdomain.com/llms.txt https://ai.yourdomain.com/humans.txt
Homepage structured files
https://ai.yourdomain.com/index.md https://ai.yourdomain.com/index.schema.json https://ai.yourdomain.com/index.yaml https://ai.yourdomain.com/index.og.json https://ai.yourdomain.com/index.xml https://ai.yourdomain.com/index.manifest.json
Inner page — e.g. /about/team
https://ai.yourdomain.com/about/team.md https://ai.yourdomain.com/about/team.schema.json https://ai.yourdomain.com/about/team.yaml https://ai.yourdomain.com/about/team.og.json https://ai.yourdomain.com/about/team.xml https://ai.yourdomain.com/about/team.manifest.json
Don't have a custom subdomain? Replace ai.yourdomain.com with files.geordy.ai/yourdomain.com — the paths are identical.
Example — homepage link-rel block
<!-- Geordy AI References -->
<link rel="llms" href="https://ai.yourdomain.com/llms.txt" type="text/plain" title="LLMs.txt" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/humans.txt" type="text/plain" title="Humans.txt" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.md" type="text/markdown" title="Markdown" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.schema.json" type="application/ld+json" title="Schema JSON-LD" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.yaml" type="application/yaml" title="YAML" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.og.json" type="application/json" title="Open Graph" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.xml" type="application/rss+xml" title="RSS Feed" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/index.manifest.json" type="application/json" title="Manifest" data-ai="true">Example — inner page (/pricing)
<!-- Geordy AI References (inner pages don't include llms.txt and humans.txt) -->
<link rel="alternate" href="https://ai.yourdomain.com/pricing.md" type="text/markdown" title="Markdown" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/pricing.schema.json" type="application/ld+json" title="Schema JSON-LD" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/pricing.yaml" type="application/yaml" title="YAML" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/pricing.og.json" type="application/json" title="Open Graph" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/pricing.xml" type="application/rss+xml" title="RSS Feed" data-ai="true">
<link rel="alternate" href="https://ai.yourdomain.com/pricing.manifest.json" type="application/json" title="Manifest" data-ai="true">Link-rel Tags Reference
Copy and paste these tags into your HTML <head> section
Dynamic sitewide implementation
Rather than adding tags manually to every page, use a reusable React component that automatically generates the correct file URLs based on the current page path. This ensures every page points to its own Geordy files.
// components/geordy-tags.tsx
import React from "react"
interface GeordyTagsProps {
domain: string
pagePath?: string
/** Enable/disable specific formats. All enabled by default. */
formats?: {
yaml?: boolean
markdown?: boolean
llms?: boolean
schema?: boolean
rss?: boolean
manifest?: boolean
humans?: boolean
og?: boolean
}
}
export function GeordyTags({
domain,
pagePath = "/",
formats = {}
}: GeordyTagsProps) {
const today = new Date().toISOString().slice(0, 10)
const isRoot = pagePath === "/"
// Preserve path structure: /about/team -> about/team
const pathSegment = isRoot ? "index" : pagePath.replace(/^\//, "")
const base = `https://files.geordy.ai/${domain}`
// Default all formats to true if not specified
const {
yaml = true,
markdown = true,
llms = true,
schema = true,
rss = true,
manifest = true,
humans = true,
og = true,
} = formats
return (
<>
{/* Per-page formats */}
{yaml && (
<link rel="alternate" type="application/yaml" href={`${base}/${pathSegment}.yaml`} title="YAML" data-ai="true" />
)}
{markdown && (
<link rel="alternate" type="text/markdown" href={`${base}/${pathSegment}.md`} title="Markdown" data-ai="true" />
)}
{schema && (
<link rel="alternate" type="application/ld+json" href={`${base}/${pathSegment}.schema.json`} title="Schema JSON-LD" data-ai="true" />
)}
{rss && (
<link rel="alternate" type="application/rss+xml" href={`${base}/${pathSegment}.xml`} title="RSS Feed" data-ai="true" />
)}
{manifest && (
<link rel="alternate" type="application/json" href={`${base}/${pathSegment}.manifest.json`} title="Manifest" data-ai="true" />
)}
{og && (
<link rel="alternate" type="application/json" href={`${base}/${pathSegment}.og.json`} title="Open Graph" data-ai="true" />
)}
{/* Root-only formats - same URL regardless of current page */}
{llms && (
<link rel="llms" href={`${base}/llms.txt`} title="LLMs.txt" data-ai="true" data-version={today} />
)}
{humans && (
<link rel="alternate" type="text/plain" href={`${base}/humans.txt`} title="Humans.txt" data-ai="true" />
)}
</>
)
}// app/layout.tsx (for static paths)
import { GeordyTags } from "@/components/geordy-tags"
return function Layout({ children }) {
return (
<html>
<head>
<GeordyTags domain="yourdomain.com" pagePath="/about/team" />
</head>
<body>{children}</body>
</html>
)
}
// For dynamic routes (recommended):
"use client"
import { usePathname } from "next/navigation"
import { GeordyTags } from "@/components/geordy-tags"
export function DynamicGeordyTags({ domain }: { domain: string }) {
const pathname = usePathname()
return <GeordyTags domain={domain} pagePath={pathname} />
}
// To disable specific formats:
<GeordyTags
domain="yourdomain.com"
pagePath={pathname}
formats={{ rss: false, manifest: false }}
/>Best Practices
Always use absolute URLs
Use full URLs including the protocol and domain. Relative paths may not be correctly interpreted by AI crawlers.
✓ https://ai.yourdomain.com/index.md
✗ /index.md
Place in <head>, before scripts
Keep all link-rel tags inside <head> and above any <script> tags for optimal discovery.
llms.txt and humans.txt are root-level files
These files exist at the root only. Note that llms.txt uses rel="llms" (not "alternate") as per the llmstxt.org specification. You can include these tags on all pages since they point to the same root files.
Complete file reference
| File | Rel | Type | Scope |
|---|---|---|---|
| llms.txt | llms | text/plain | Homepage only |
| humans.txt | alternate | text/plain | Homepage only |
| [page].md | alternate | text/markdown | Every page |
| [page].schema.json | alternate | application/ld+json | Every page |
| [page].yaml | alternate | application/yaml | Every page |
| [page].og.json | alternate | application/json | Every page |
| [page].xml | alternate | application/rss+xml | Every page |
| [page].manifest.json | alternate | application/json | Every page |
Troubleshooting
If your link-rel tags aren't working as expected, check the following:
- Verify the URLs are accessible (return HTTP 200)
- Ensure tags are placed in the
<head>section - Check for typos in the href or type attributes
- Confirm your custom domain is properly configured
For more help, see Tags or JSON-LD Missing.
Next Steps
Learn more about the JSON-LD Schema format and how it structures your content for search engines.