Reference tags tell AI systems where to find your structured files. Without them, the files exist but are invisible to crawlers.
What to add
Add <link rel="alternate"> tags inside the <head> of each page, pointing to the matching Geordy files.
Homepage (8 files)
The homepage includes llms.txt and humans.txt — root-only files. Note that llms.txt uses rel="llms" per the llmstxt.org spec.
<!-- Geordy AI References -->
<link rel="llms" type="text/plain" href="https://ai.yourdomain.com/llms.txt" title="LLMs.txt" data-ai="true" />
<link rel="alternate" type="text/plain" href="https://ai.yourdomain.com/humans.txt" title="Humans.txt" data-ai="true" />
<link rel="alternate" type="text/markdown" href="https://ai.yourdomain.com/index.md" title="Markdown" data-ai="true" />
<link rel="alternate" type="application/ld+json" href="https://ai.yourdomain.com/index.schema.json" title="Schema" data-ai="true" />
<link rel="alternate" type="application/yaml" href="https://ai.yourdomain.com/index.yaml" title="YAML" data-ai="true" />
<link rel="alternate" type="application/json" href="https://ai.yourdomain.com/index.og.json" title="Open Graph" data-ai="true" />
<link rel="alternate" type="application/rss+xml" href="https://ai.yourdomain.com/index.xml" title="RSS Feed" data-ai="true" />
<link rel="alternate" type="application/json" href="https://ai.yourdomain.com/index.manifest.json" title="Manifest" data-ai="true" />Inner pages (6 files)
Inner pages use the page path as the filename, preserving directory structure. Root-only files (llms.txt, humans.txt) can still be included — they always point to the same root URL.
<link rel="alternate" type="text/markdown" href="https://ai.yourdomain.com/about/team.md" title="Markdown" data-ai="true" />
<link rel="alternate" type="application/ld+json" href="https://ai.yourdomain.com/about/team.schema.json" title="Schema" data-ai="true" />
<link rel="alternate" type="application/yaml" href="https://ai.yourdomain.com/about/team.yaml" title="YAML" data-ai="true" />
<link rel="alternate" type="application/json" href="https://ai.yourdomain.com/about/team.og.json" title="Open Graph" data-ai="true" />
<link rel="alternate" type="application/rss+xml" href="https://ai.yourdomain.com/about/team.xml" title="RSS Feed" data-ai="true" />
<link rel="alternate" type="application/json" href="https://ai.yourdomain.com/about/team.manifest.json" title="Manifest" data-ai="true" />Path mapping: /about → about.*, /pricing → pricing.*, /about/team → about/team.*
Dynamic implementation (recommended)
Use a reusable React component that automatically generates correct file URLs based on the current page path. This ensures every page points to its own Geordy files without manual updates.
import React from "react"
interface GeordyTagsProps {
domain: string
pagePath?: string
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
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" 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 */}
{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" />}
</>
)
}Usage in Next.js
"use client"
import { usePathname } from "next/navigation"
import { GeordyTags } from "@/components/geordy-tags"
return function Layout({ children }) {
const pathname = usePathname()
return (
<html>
<head>
<GeordyTags domain="yourdomain.com" pagePath={pathname} />
</head>
<body>{children}</body>
</html>
)
}
// To disable specific formats:
<GeordyTags domain="yourdomain.com" pagePath={pathname} formats={{ rss: false, manifest: false }} />Benefits: Tags auto-generate for every page. New pages are covered automatically. No manual updates needed.
Verification
- 1View page source and search for your subdomain — tags should appear in the <head>
- 2Click one of the href URLs — the file should load
- 3Check multiple pages to confirm dynamic implementation works
This is the activation step. Files that exist but aren't referenced are invisible to AI systems.