feat(seo): sharpen posts and voice pages sitewide#133
Merged
Conversation
Review the four most recent posts against the site's SEO/GEO rules and
fix what they missed.
Posts:
- Titles and descriptions back inside SERP budgets (two descriptions ran
187 and 197 chars; two titles overran once " — WaveKat" is appended).
- Bridge the entity term to the demand term: a call flow is what other
systems sell as an auto attendant. Adds that to the lead, the title,
and a new FAQ that also states plainly what it is not (a full IVR),
so the page never argues with itself.
- Label-only H2s ("What it does", "Turning it on", "How it works")
rewritten as the thing the section answers.
- Self-contained lead sentences under headings that started mid-thought,
so a passage still reads correctly lifted out of context.
- Drop the duplicated product definition in the click-to-call intro.
- Add a per-system audio format table to the voice generator post, and
cross-link the posts that belong together.
Pages:
- /voice/ never contained "call flow", "auto attendant" or
"click-to-call", so the page that should own those queries had nothing
to rank on. Adds two feature cards, two FAQs (feeding the existing
FAQPage schema), and a featureList on the SoftwareApplication schema.
- /voice/prompts/ links the generator to call flows.
CLAUDE.md: every page, post and translation now gets a claude-seo review
before shipping, with the length budgets written down — including the
CJK ones, since SERP truncation is pixel-width, not characters.
Translations are not updated yet: the 8 locales still mirror the old
English structure, and their meta fields have their own length problem
(one French description is 261 chars). Both land next.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwxQJL43iApJRb4NS5p6vD
Contributor
Stacked on #133 — mirrors the English work into the eight translations and clears the meta-length backlog site-wide. **Merge #133 first**; GitHub will retarget this to `main` automatically. ## Posts — 4 posts × 8 locales Renamed headings, self-contained lead sentences, the merged click-to-call intro, the per-system audio format table, and the new FAQs — translated rather than transplanted. The demand term is bridged to the product noun in each market's own vocabulary: | Locale | Term used for "auto attendant" | |---|---| | zh-Hans / zh-Hant | 自动总机 / 自動總機 | | ja | オートアテンダント(自動受付) | | ko | 자동응답 (오토 어텐던트) | | de | automatische Telefonzentrale | | es | operadora automática | | fr | standard automatique | | it | centralino automatico | "Call flow" stays the product noun everywhere, and each locale's new FAQ says plainly that it is **not** a full enterprise IVR — so no page argues with itself in any language. ## Meta lengths — why this was needed A faithful translation runs **30–60% longer** than its English source, so **59 title/description fields were truncating in SERPs**; one French description was 261 characters against a ~160 budget. All are now inside budget, measured by **display width** rather than character count — CJK truncates at roughly half the character count of Latin text, so a naïve `.length` check both over- and under-reports. This pass also covers the five older posts, not just the recent four. ## Pages — 8 locales each - `/voice/` gains the two feature cards, the two FAQs (feeding the existing `FAQPage` schema), and the `SoftwareApplication` `featureList`. - `/voice/prompts/` gains the FAQ connecting the generator to call flows. ## Verification - `npx astro build` → 213 pages; `npm run check:links` → no broken or leaking internal links. - Structural parity audit: every localized post matches the English H2/H3/table counts exactly, and all eight localized product pages match the English feature/FAQ/schema counts. - **No URLs changed.** Slugs come from filenames, not titles; nothing was renamed, and nothing in the repo links to an in-post heading anchor. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01EwxQJL43iApJRb4NS5p6vD Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwxQJL43iApJRb4NS5p6vD
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.
An SEO/GEO pass over the four most recent blog posts and the
/voice/productpages, applied in all nine languages — plus the CLAUDE.md rule that makes
this review mandatory going forward. (#134 merged into this branch, so this PR
now carries both the English work and the full i18n sync.)
No URLs changed. No file was renamed, so every slug is identical and no
redirects are needed. Some
##headings were reworded; nothing in the repolinks to an in-post heading anchor.
Why
Three problems, found with the
claude-seoskills:/voice/never said what people search for. The product page containedthe words "call flow", "auto attendant" and "click-to-call" exactly zero
times, so the two newest features had no landing page — only blog posts.
faithful de/es/fr/it translation runs 30–60% longer than its English source,
and one French description had reached 261 characters against a ~160 budget.
labels ("What it does", "How it works") rather than the question the section
answers, and one post defined the product twice in two consecutive
paragraphs.
Entity term vs demand term
The interesting decision here. "Call flow" is what the app calls the feature;
"auto attendant" is what people type into Google. Renaming the feature would
break the naming consistency CLAUDE.md asks for, so instead the two are
bridged: the product noun stays the entity everywhere, the demand term goes
in the title, the description, one bridging sentence, and an FAQ that says
plainly which is which — including that a call flow is not a full enterprise
IVR. No page claims something its own FAQ then denies.
Each locale uses its own market's word rather than a transliteration:
What changed
Posts (4 × 9 languages)
answer-calls-with-a-call-flow— retitled Call Flows — an Auto Attendant forSmall Business; self-contained lead; new FAQ on auto attendant vs IVR.
click-to-call-phone-links— merged the duplicated definition into onedefinitional lead; description 187 → 145.
phone-menu-ivr-voice-generator— new "Which format does your phone systemneed?" table (Asterisk/FreePBX/3CX/Twilio/hosted VoIP, verified against each
vendor's docs) and two FAQs; 971 → 1,309 words, 3 → 5 internal links.
hold-switch-and-transfer-calls— description trimmed, cross-link added.Meta lengths were re-audited across all 81 posts by display width, not
character count — CJK glyphs occupy two width units, so a naive character count
over-penalizes Latin brand names inside CJK titles and flagged 8 posts that were
in fact fine. All genuine overflows are fixed.
Pages (2 × 9 languages)
/voice/— two feature cards (answers when you can't, click a number to callit), two FAQs, and a
featureListon theSoftwareApplicationschema./voice/prompts/— FAQ linking the prompt generator to call flows.CLAUDE.md — every page, post, or translation now gets a
claude-seoreviewbefore it ships, with the length budgets (including the separate CJK budget) and
the entity-vs-demand-term rule written down.
Verification
npx astro build— 213 pagesnpm run check:links— no broken or leaking internal linksnpm run check:screenshots— all 162 presentcounts exactly; all nine
/voice/pages emit 14 FAQ questions and afeatureList; all nine/voice/prompts/pages emit 7.🤖 Generated with Claude Code
https://claude.ai/code/session_01EwxQJL43iApJRb4NS5p6vD