Link Tags

Connect your pages to their structured versions.

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.

Homepage <head>HTML
<!-- 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.

/about/team page <head>HTML
<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.

components/geordy-tags.tsxTSX
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

app/layout.tsxTSX
"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

  1. 1View page source and search for your subdomain — tags should appear in the <head>
  2. 2Click one of the href URLs — the file should load
  3. 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.