joeyh.name, read 4 days ago. Back to the report

53 to 100 in 21 steps

Do them in this order. Each step says what to change, on which pages, and what it adds. Hand the whole plan to your agent, or work through it yourself.

5353 nownow611#214,387672733784top 50%8258568678788999110931194129413961496159716971799189919992010021full marks

Now #239,604 of 264,545Step 1 #214,387Step 4 top 50%Step 21 full marks

Worked out from this read, with every step before it done. A score says pages are well formed. It does not say an assistant cites the site.

The steps

Each is one change across the pages named. When one is live, read the site again and mttr marks it done.

  1. 1

    Add a way to get in touch

    +8 points, to 61, and #214,387, 25,217 places up

    Give the page a form or a clear link to request a quote or get in touch.

    91 pages

    See the pages
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • and 81 more in the copied plan
  2. 2

    Add a tap-to-call link

    +6 points, to 67

    Add a tap-to-call phone link.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  3. 3

    Set each page's canonical address

    +6 points, to 73

    Add a canonical link that points to the page itself.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  4. 4

    Add structured data

    +5 points, to 78, and into the top 50%

    Add valid JSON-LD that says what the page is.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  5. 5

    Use one main heading

    +4 points, to 82

    Give the page exactly one h1 that says what it is about.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  6. 6

    Fix description lengths

    +3 points, to 85

    Write a meta description of 70 to 165 characters that summarizes the page.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  7. 7

    Answer the first question right under it

    +1 point, to 86

    Answer the first question in the paragraph right under it, in 25 to 90 words. Whether the paragraph truly answers is for the judge or a person to say.

    32 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • /blog/dwn
    • and 22 more in the copied plan
  8. 8

    Name the publisher

    +1 point, to 87

    Name the author or publisher in the Article schema.

    32 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • /blog/dwn
    • and 22 more in the copied plan
  9. 9

    Fix title lengths

    +2 points, to 89

    Write a title of 15 to 65 characters that leads with what the page covers.

    70 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 60 more in the copied plan
  10. 10

    Link straight to the final address

    +2 points, to 91

    Point links and the sitemap at the final address, not at one that redirects.

    94 pages

    See the pages
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • and 84 more in the copied plan
  11. 11

    Match structured data to the page

    +2 points, to 93

    Use the schema type that matches the page: Article for guides, Service or Product for offers, Organization or WebSite for the home page.

    33 pages, 32 of them under /blog/

    See the pages
    • /
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • and 23 more in the copied plan
  12. 12

    Phrase headings as questions

    +1 point, to 94

    Phrase at least one heading as the question a person would ask.

    31 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • /blog/dwn
    • and 21 more in the copied plan
  13. 13

    Add depth to thin pages

    Under a point

    Add true, specific detail until the page covers its subject.

    19 pages, 18 of them under /blog/

    See the pages
    • /
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/entry
    • /blog/entry/Flattr_stats
    • and 9 more in the copied plan
  14. 14

    Show sources on guides

    +2 points, to 96

    Link the sources for the guide's facts where a reader can see them. Official and primary sources carry the most weight.

    12 pages under /blog/

    See the pages
    • /blog/archives
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/entry
    • /blog/entry/WASM_Wayland_Web_WWW
    • /blog/entry/big_loads_offgrid_with_a_small_battery_sidelined/comments.rss
    • /blog/entry/blog_moved
    • and 2 more in the copied plan
  15. 15

    Put figures in tables

    Under a point

    Where the guide compares options or gives figures, put them in a table.

    20 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/discussion
    • /blog/dwn
    • /blog/entry
    • /blog/entry/Debian_and_the_sirens
    • /blog/entry/Flattr_stats
    • /blog/entry/WASM_Wayland_Web_WWW
    • /blog/entry/banning_all_Anthropic_employees
    • /blog/entry/best_of_the_web
    • and 10 more in the copied plan
  16. 16

    Put the text in the HTML

    +1 point, to 97

    Put the page text in the HTML the server sends. Most AI crawlers do not run scripts.

    10 pages under /blog/

    See the pages
    • /blog/archives
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/entry
    • /blog/entry/best_of_the_web
    • /blog/entry/blog_moved
    • /blog/entry/contact_update
  17. 17

    Add real images to content

    Under a point

    Add a photo, drawing, or chart as an img with alt text. A CSS background image has no alt text and is not read as part of the page.

    19 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/dwn
    • /blog/entry
    • /blog/entry/Debian_and_the_sirens
    • and 9 more in the copied plan
  18. 18

    Set a share image

    +2 points, to 99

    Set og:image so links to the page carry a picture.

    100 pages

    See the pages
    • /
    • /blog
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • and 90 more in the copied plan
  19. 19

    Add breadcrumb data

    Under a point

    Add BreadcrumbList schema so the page has a place in the site.

    32 pages under /blog/

    See the pages
    • /blog/about
    • /blog/archives
    • /blog/archives/2025/09
    • /blog/archives/2025/10
    • /blog/archives/2025/11
    • /blog/archives/2026/09
    • /blog/archives/2026/10
    • /blog/archives/2026/11
    • /blog/discussion
    • /blog/dwn
    • and 22 more in the copied plan
  20. 20

    Add lists or tables

    Under a point

    Add a table, a list, or a definition list. Assistants quote these more readily than prose.

    16 pages under /blog/

    See the pages
    • /blog/discussion
    • /blog/dwn
    • /blog/entry
    • /blog/entry/Debian_and_the_sirens
    • /blog/entry/WASM_Wayland_Web_WWW
    • /blog/entry/banning_all_Anthropic_employees
    • /blog/entry/best_of_the_web
    • /blog/entry/big_loads_offgrid_with_a_small_battery_sidelined
    • /blog/entry/big_loads_offgrid_with_a_small_battery_sidelined/comments.rss
    • /blog/entry/blog_moved
    • and 6 more in the copied plan
  21. 21

    Describe images

    +1 point, to 100, and full marks

    Describe every content image in its alt text.

    19 pages, 12 of them under /blog/

    See the pages
    • /blog
    • /blog/archives/2025/09
    • /blog/discussion
    • /blog/entry/WASM_Wayland_Web_WWW
    • /blog/entry/aiming_at_December
    • /blog/entry/banning_all_Anthropic_employees
    • /blog/entry/big_loads_offgrid_with_a_small_battery_sidelined
    • /blog/entry/cheap_DIY_solar_fence_design
    • /blog/entry/offgrid_electric_car
    • /blog/entry/policy_on_adding_AI_generated_content_to_my_software_projects
    • and 9 more in the copied plan
5 more, to tidy up after 100
  1. 22

    Make near-copy pages distinct

    Under a point

    Rewrite or merge pages that share most of their text. A page that only swaps a city or product name is what search engines treat as doorway or scaled content.

    Once, for the whole site

  2. 23

    Publish a sitemap

    Under a point

    Publish /sitemap.xml listing every page that should rank, and name it in robots.txt.

    Once, for the whole site

  3. 24

    Add an llms.txt

    Under a point

    Add /llms.txt: a short plain text map of the site for assistants. Its effect is unproven, so treat it as cheap insurance.

    Once, for the whole site

  4. 25

    Link to your profiles

    Under a point

    Link from the home page, in its header or footer, to each profile you keep: Instagram, TikTok, YouTube, Twitch, Facebook, X, LinkedIn.

    Once, for the whole site

  5. 26

    Show when guides were updated

    Under a point

    Show when the guide was last updated, and set dateModified in its schema.

    2 pages

    See the pages
    • /blog/entry/big_loads_offgrid_with_a_small_battery_sidelined/comments.rss
    • /blog/index.rss

What else the read found

Half its pages start answering within 41 ms, inside the 800 ms a crawler is patient with. One fetch a page, the way a crawler sees it.

  • /ikiwiki.cgi1.6 s
  • /267 ms
  • /blog/haskell92 ms
  • /code/electrum-mnemonic86 ms
  • /devblog83 ms

Fastest: /code/moreutils, 34 ms. Heaviest: /blog/haskell, 90 KB.

Read from its home page’s code and the headers its server sent. A tool that loads later, or only on other pages, is not seen here.

  • ApacheServer
pages with strong signs
3
hidden characters
0
chat, markdown or placeholders left in
32
dashes per 1,000 words
0.3
  • /recentchanges markdown never turned into formatting
  • /devblog placeholders never filled in
  • /recentchanges/index.rss markdown never turned into formatting

A sign is not proof. Hidden characters can carry a watermark or instructions meant for an AI, and they come off with a clean copy of the text.

  • / fails 9: Add structured data, Set each page's canonical address and Add depth to thin pages1 page
  • /blog fails 10: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /caving fails 10: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /devblog fails 10: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /boxen fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /code fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /home fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /languages fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /offgrid fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /pics fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /podcasts fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page
  • /recentchanges fails 9: Add a way to get in touch, Add structured data and Set each page's canonical address1 page

And 18 more parts of the site.

The read stopped at its page limit, so pages no link leads to cannot be told from pages it did not reach, and neither is reported.

Rather go through these with one of our experts? Book a strategy session

Fix joeyh.name with your agent

Your agent makes the fixes. mttr checks each one. Free.

In the site’s repositorynpx skills add subinternal/mttr
Then tell your agentCheck joeyh.name with mttr and fix what’s worth the most.

Claude Code, Codex, Cursor or any agent that reads AGENTS.md.

Claude Code, onceclaude mcp add --transport http mttr https://mttr.si/mcp
It needs a free key
Another agent
Read it againChanged something? A site is read at most once every ten minutes.