DEV Community

Michael Taus
Michael Taus

Posted on AI-assisted

A Markdown Twin for Every College Page, and What I Can't Prove About It

Every college page I checked on helloaiko.co exists twice: as HTML for people and search engines, and as a Markdown file for search and answer bots. This post shows what one such pair looks like today, gives you a few curl commands to check that a page and its twin agree, and says plainly what I can't prove.

I'm Michael Taus. I'm building Aiko, a free AI college advisor, and these are its public college profiles. Everything I measured below was read on 2026-10-25, Pacific time.

What one college has

Take the University of Michigan-Ann Arbor. Its profile page has three neighbors, and all four URLs returned HTTP 200.

Surface Path Size on 2026-10-25
HTML page /c/university-of-michigan-ann-arbor about 29,600 bytes (my reads ranged from 29,217 to 29,900)
Markdown twin /c/university-of-michigan-ann-arbor.md 7,060 bytes
llms.txt /llms.txt 2,561 bytes
Sitemap /sitemap.xml 209,443 bytes

The HTML page. The facts are in the visible tables of the raw response, so a client that doesn't run JavaScript still reads them. There is one JSON-LD block (CollegeOrUniversity, PostalAddress, PropertyValue). It is an identity card, not a fact sheet: name, URL, IPEDS UnitID, state, the college's own site, a logo and a photo. It carries none of the cost, admissions or enrollment figures. The canonical URL points at the page itself. The <head> has one <link rel="alternate" type="text/markdown"> that points at the twin, and the response carries a matching Link header.

The Markdown twin. It is about 24% of the HTML's size and holds the same facts as plain text: a heading, a one-line description, the UnitID, a Key facts list, a sources list and a citation line. Here is its cost block, unchanged from the file:

- **Average net price:** $13,138
- **Average net price by family income:** Family income under $30k $1,043 · $30k–$48k $1,878 · $48k–$75k $4,895 · $75k–$110k $10,869 · $110k and up $26,517
- **Net price data:** College Scorecard, academic year 2023-24
- **Total cost before aid:** $34,782 in-state · $75,626 out-of-state
- **Tuition:** $16,896 in-state · $57,740 out-of-state
- **Housing & food:** $13,856
- **Books & supplies:** $1,126
- **Students on Pell grants:** 16% — federal aid for lower-income families
- **Estimate your own price:** https://npc.collegeboard.org/app/umich
Enter fullscreen mode Exit fullscreen mode

The five income-group figures sit on one line of text, not in a table or in structured data. They are College Scorecard average net prices for the 2023-24 award year. The Scorecard glossary defines net price as an average for students who receive federal aid and, at a public school like this one, for in-state students only. The twin labels that line "Average net price by family income", which is what the figures are: group averages.

A naive diff of every number in both copies is noisy: the HTML has "typical for public four-year colleges" comparison notes and a program count that the twin lacks, and the twin prints the UnitID that the HTML keeps in its markup.

llms.txt. It lists the five hubs, the two URL patterns (/c/{slug} for HTML, /c/{slug}.md for Markdown), the sitemap and a few example colleges.

The sitemap. It has 2,789 URLs: 2,509 college pages, 228 /explore pages and some other site pages. It lists no .md URL, which is a deliberate choice by the site's SEO owner: the HTML pages are the ones that need to be indexed first. One of the /explore pages is Big school or small school, which splits every four-year college by undergraduate enrollment. The HTML page links to it and the other four hubs; the twin links to none of them. The twin gives Michigan's 33,730 undergraduates as one fact, and the hub is where a crawler or a person goes to find colleges of a similar size.

Why the twin exists

I built it so that the search and answer engines that fetch a page can read a college's facts without running JavaScript and without wading through navigation and layout. The site's robots.txt blocks AI training crawlers by name and allows the search and answer bots; the twin is for the second group. Each page now points at its twin twice, in a <link rel="alternate"> tag in the head and in a Link response header. That is a design intent, and it is all it is. I have no measurement that it works.

A short test that a page and its twin agree

Run these against any college slug. The results below are what I got against the live site on 2026-10-25 (Pacific time) for Michigan.

p=https://helloaiko.co/c/university-of-michigan-ann-arbor
Enter fullscreen mode Exit fullscreen mode

1. Both URLs answer.

for u in "$p" "$p.md"; do curl -s -o /dev/null -w '%{http_code}\n' "$u"; done
Enter fullscreen mode Exit fullscreen mode

Both printed 200.

2. The key facts appear in both.

for u in "$p" "$p.md"; do echo "== $u"; curl -s "$u" | grep -oE '\$13,138|\$34,782|\$1,043|\$26,517|33,730' | sort -u; done
Enter fullscreen mode Exit fullscreen mode

Each file contained all five strings: $1,043, $13,138, $26,517, $34,782 and 33,730.

3. One JSON-LD block, and a canonical that points at itself. I use grep -o | wc -l because grep -c counts lines, not matches.

curl -s "$p" | grep -o 'application/ld+json' | wc -l
curl -s "$p" | grep -o '<link rel="canonical"[^>]*>'
Enter fullscreen mode Exit fullscreen mode

The result was 1, and a canonical equal to the page's own URL.

4. The page is in the sitemap and the twin is not.

curl -s https://helloaiko.co/sitemap.xml | grep -c 'university-of-michigan-ann-arbor'
curl -s https://helloaiko.co/sitemap.xml | grep -c '\.md'
Enter fullscreen mode Exit fullscreen mode

The result was 1 and 0.

5. The page points at its twin.

curl -s -D - -o /dev/null "$p" | grep -i '^link:'
curl -s "$p" | grep -o '<link rel="alternate"[^>]*>'
Enter fullscreen mode Exit fullscreen mode

For Michigan, the first printed a link: header naming the .md address with rel="alternate"; type="text/markdown", and the second printed a <link rel="alternate" type="text/markdown" ...> tag with the same address. I also ran both on eight colleges picked at random from the sitemap. Each had the header and the tag, and each twin answered 200 with text/markdown.

Two lessons from running these. Test facts, not bytes: sizes move whenever the data does, so pin a short list of figures instead of a size or a full diff. And know what the test proves. Two surfaces that agree are consistent with each other. If both are wrong the same way, every check above still passes.

I ran this on one college. To sample others, pick slugs from the sitemap and swap in figures from each school's own page:

curl -s https://helloaiko.co/sitemap.xml | grep -o 'https://helloaiko.co/c/[^<]*' | sort -R | head -n 5
Enter fullscreen mode Exit fullscreen mode

How much to trust this

Measured on 2026-10-25 (Pacific time), by me from the live site and from copies saved that day: the HTTP statuses, the byte sizes, the sitemap counts, what the JSON-LD block contains, the response headers (the page answers text/html; charset=utf-8 and the twin text/markdown; charset=utf-8, both with cache-control: public, max-age=300, stale-while-revalidate=60, neither with an X-Robots-Tag header, and Cloudflare does not cache them), the Link header and the <link rel="alternate"> tag on Michigan's page and on eight colleges picked at random, the twin's 200 on those nine, the .md references (two on the page, one in the head tag and one in the header; none in the sitemap), and the five matching figures on one college's page and twin. Measured by the site's SEO owner, in their own live check: 80 of 80 colleges sampled at random from the sitemap returned 200 for both the page and the twin.

A definition, restated from the federal source: net price, in the Scorecard glossary linked above.

Design intent and opinion: why the twin exists, and my advice to test facts rather than bytes.

Not measured: whether any AI answer engine cites these pages; how many of them any search engine has indexed (I'm giving no count); whether anything fetches a twin or follows the alternate link; whether the page and twin AGREE on any page other than Michigan's, which leaves 2,508 other college pages untested for agreement (the 80-college sample checked only that both URLs answer); and whether the twin changes any outcome at all.

If you run the commands against another slug and the two surfaces disagree, I'd like to know.

Top comments (0)