---
title: "Link Tags"
description: "Connect your pages to their structured versions."
section: "Get started"
canonical: "https://geordy.ai/docs/install-references"
---
# 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. 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" 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" 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. Tags then auto-generate for every page, with no manual updates.

**components/geordy-tags.tsx**
```tsx
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 === "/"
  const pathSegment = isRoot ? "index" : pagePath.replace(/^\//, "")
  const base = `https://files.geordy.ai/${domain}`

  const { yaml = true, markdown = true, llms = true, schema = true, rss = true, manifest = true, humans = true, og = true } = formats

  return (
    <>
      {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" 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" />}

      {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.tsx**
```tsx
"use client"
import { usePathname } from "next/navigation"
import { GeordyTags } from "@/components/geordy-tags"

export default 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 }} />
```

## Verification

1. View page source and search for your subdomain - tags should appear in the <head>
2. Click one of the href URLs - the file should load
3. Check multiple pages to confirm dynamic implementation works

> This is the activation step. Files that exist but aren't referenced are invisible to AI systems.
---

Source: https://geordy.ai/docs/install-references
This is a machine-readable markdown version of that page, generated by Geordy.