SEO fixes: titles that fit, schema on every tool hub, llms.txt, WebP covers - #233
Merged
Merged
Conversation
…covers From a check over every page of the build. Before: 108 titles over the sixty characters a results line shows, six descriptions over 160, eight pages that skipped from h1 to h3, six tool hubs with no structured data, no llms.txt, and 4.8 MB of photo covers on /blog shown at 88px. After: 15 titles over sixty, the longest 64; none of the rest. - Seo.svelte added " | LangX" to any title up to 56 characters, so 53 to 56 came out at 61 to 64. The suffix now goes on only when the whole fits. - Six post titles past 65 get a shorter `seoTitle` in their front matter, used for the title tag alone; the heading, lists and drawn card keep theirs. - The homepage H1 says "language exchange app", the words the title targets. The chapter H2s stay fragments: DESIGN.md's Lowercase Chapter Rule. - The alphabet, vocabulary-test, meaning-quiz, word-game, similar and guess-the-language hubs get BreadcrumbList and ItemList, as their siblings have, and titles that say what they are. So do /tools, /plans and /tokens. - /llms.txt, built from the same data as the pages: a summary, the key pages, the homepage FAQ, every post and the tools. - scripts/covers.mjs makes WebP copies of the 14 photo covers: a 176px square for the list tile and a full-size one for the post. The originals stay for social cards and the feed; a post with no copies keeps showing its original. - Footer group headings are h2, not h3, with the h3's metrics kept. - Six descriptions trimmed under 160; one "here" link given words. Checked against a build of main in the browser: the footer headings compute the same styles and positions, and the blog list, a cover and an in-post full-bleed image keep their boxes and page height. svelte-check has no errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
From an SEO check over all 1,371 built pages, plus the live site's AI-crawler access.
Seo.svelteappended " | LangX" to any title up to 56 characters, so 53–56 came out at 61–64. The suffix now goes on only when the whole fits in 60. Six post titles over 65 get an optionalseoTitlefront-matter field, used only for the title tag./tools,/plansand/tokensget better titles too./llms.txt: prerendered from site data: summary, key pages, the homepage FAQ, every post, the tools.scripts/covers.mjsmakes a 176px square (list tile) and a full-size WebP for each of the 14 photo covers. The PNG/JPEG originals stay for og:image and RSS, and a post whose copies are missing falls back to its original.Verification: the scan was re-run on the new build. Compared in the browser against a build of main, the footer, the blog list, an article cover and an in-post full-bleed image keep the same boxes and page heights. svelte-check shows 0 errors and eslint is clean.
Not in this PR: the social preview image (
static/images/site-preview.png) still shows the old H1 line. Separately, the FAQ says the minimum age is 16 while PRODUCT.md says 18; that's flagged as its own task.🤖 Generated with Claude Code