Skip to content

seo: post-cliff stabilization (FAQ schemas + CTR + entity drift fixes)#523

Merged
aafre merged 5 commits into
mainfrom
seo/post-cliff-stabilization
May 25, 2026
Merged

seo: post-cliff stabilization (FAQ schemas + CTR + entity drift fixes)#523
aafre merged 5 commits into
mainfrom
seo/post-cliff-stabilization

Conversation

@aafre
Copy link
Copy Markdown
Owner

@aafre aafre commented May 12, 2026

Summary

Phase 1 of post-Apr-24-cliff SEO/GEO stabilization. Fresh branch off main, parking release/v3.25.0-integration (246 files of unrelated template-engine/LaTeX work). Target: v3.24.1 patch release.

Current state (May 11, GSC): YELLOW — 5–13 clicks/day for 17 days post-cliff. 71% branded share. Homepage holding (40 clicks/7d); content cluster decimated (claude-prompts 205 → 3).

Diagnosis (per seo-tracking/post-march2026-recovery-plan.md + Gemini Deep Research v2/v3): March 2026 Google core update late-stage recalibration + AI Overview absorption + competitor brand-bidding (Mistake #5 RECURRENCE). Two-problem reframe still holds.

What this PR ships

4 atomic commits, 5 files changed, 120 insertions:

  1. 605ece5 — Cherry-pick PR fix(seo): post-v3.24.0 CTR optimizations for high-impression pages #458 (d9a671a): CTR meta rewrites for FlowCV + Best-Builders + 20+ keyword pages. Was production-ready and sitting unmerged since April 11.
  2. 2472c5e — FAQPage schema + answer-first GEO blocks on /blog/flowcv-vs-easy-free-resume and /blog/best-free-resume-builders-2026. Per Gemini's 2026 GEO data: FAQPage JSON-LD drives 3.1× AI citation rate even after the 2026-05-07 visual rich-result deprecation. Answer-first blocks (40–60 words, standalone factual) target the +47% citation lift from extractable passages.
  3. c55761b — Footer entity drift fix: github.com/aafre/resume-builder was in 3 schemas but missing from Footer crawlable links. Trustpilot was a styled badge with <FaStar> icon, no plain text anchor — added one. Surfaced during 2026-05-11 sameAs audit.
  4. 410b5f6 — Tutorial video sameAs additions: youtube.com/watch?v=JU3QgmXpfQg was listed in protected-pages.md Brand Defence section as required entity reference but absent from all 3 sameAs arrays. Now in index.html WebApplication + Organization, and schemaGenerators.ts SoftwareApplication. Per Gemini v3: YouTube = 18.2% of AIO citations in 2026.

Iron Rules respected (per post-march2026-recovery-plan.md)

  • ❌ No title/H1/canonical changes on any Tier 1 page
  • ❌ No new ad slots (VITE_ENABLE_EXPLICIT_ADS stays false — CWV risk during recalibration)
  • ❌ No content rewrites on Tier 1 (those are gated Phase 2/3 of the recovery plan, separate release)
  • ❌ No removal of existing FAQPage schema (visual deprecation ≠ abandon schema)
  • ✅ FAQPage schema additions on Tier 2 pages — logged, allowed per recovery plan GEO checklist
  • ✅ Entity sameAs drift fixes — additive only, no removal

Deferred from this patch

  • Person schema on /about (Phase 1 step 5) — user weighing personal-exposure tradeoff per Gemini v3 threat model. Design preserved in plan file for activation when ready.
  • Prerender perf hardening (c818a33, 64bb155, 2645fa4, 182db46) — turned out to be tightly coupled to getActiveBlogPosts() from the sitemap auto-include refactor, which we're explicitly deferring (regresses Tier 1 lastmod during recalibration window). Will ship as a follow-up patch bundled properly.
  • Phase 2 prune/consolidate (AI prompts cluster consolidation, low-quality keyword page 410 Gone) — needs per-decision owner sign-off + Phase 0.5 content quality audit first.
  • Defensive Google Ads PPC — owner-side action, parallel workstream.

Test plan

  • tsc --noEmit clean
  • vitest run — 1437 passed, 23 skipped, 0 failed
  • npm run build succeeds; sitemap regenerated (120 URLs)
  • eslint on touched files — only pre-existing unused-_ in wrapInGraph (line 151), not introduced here
  • All 10 Phase 1 source-level markers verified via grep
  • Post-merge: request re-indexing in GSC for /blog/flowcv-vs-easy-free-resume and /blog/best-free-resume-builders-2026
  • Post-merge: Rich Results Test on both blog URLs to confirm FAQPage schema parses
  • Day 7: GSC CTR check on FlowCV (target lift from 0.14%) + Best-Builders (target lift from 0%)
  • Day 14: PageSpeed Insights LCP/CLS/INP on /, FlowCV, Best-Builders, /free-resume-builder-no-sign-up — confirm "Good" on desktop + mobile (no CWV regression from JSX additions)
  • Day 28: GSC + AIO citation audit (Perplexity/Gemini/Google AIO test on top FlowCV + Best-Builders queries) — record citation presence as new tracked variable per mistakes-learned.md Mistake Added tests for the modern UI  #8 lesson 14

Rollback trigger

Per recovery plan iron rule 10: if any modified page drops >5 positions vs 2026-05-11 GSC baseline within 14 days, revert the specific change. Each commit is atomic and independently revertable.

References

  • Plan file: ~/.claude/plans/extract-gsc-data-and-binary-babbage.md (approved 2026-05-11)
  • Recovery plan: seo-tracking/post-march2026-recovery-plan.md (Phase 1 of multi-phase recovery)
  • Cliff analysis: seo-tracking/changelog.md 2026-05-03 entry
  • Mistakes: seo-tracking/mistakes-learned.md Mistake Updated actions #5 RECURRENCE + Mistake Added tests for the modern UI  #8

aafre added 4 commits May 12, 2026 08:31
)

- FlowCV comparison: rewrite meta for 14.8K imp at 0.14% CTR
- Best Free Builders 2026: rewrite meta for 1.6K imp at 0% CTR
- Keyword pages: optimize meta template across 20+ pages
- Add missing lastUpdated prop to BestFreeResumeBuilders2026
…est-Builders

Phase 1 of post-Apr-24-cliff stabilization patch. Tier 2 page additions only
— no Tier 1 surface touched. Per Gemini Deep Research 2026-05-11, FAQPage
JSON-LD drives 3.1x AI Overview citation rate even after the 2026-05-07
visual rich-result deprecation. Answer-first blocks (40-60 words, standalone
factual) target the +47% citation lift from extractable passages under H1.

- FlowCV: new FAQPage schema (7 entries answering top GSC queries —
  "is FlowCV legit", "is FlowCV free", "FlowCV vs alternatives", etc.);
  matching on-page FAQ section so JSX text mirrors schema; answer-first
  block above the verdict box; bump lastUpdated + comparison dateModified
  to 2026-05-11.
- Best-Builders: extract inline FAQ array to BEST_BUILDERS_FAQS const;
  generate FAQPage JSON-LD via Helmet; answer-first block above intro;
  bump lastUpdated to 2026-05-11.

Verified: tsc --noEmit clean; vitest 1437 tests pass; vite build succeeds;
all 10 Phase 1 markers present at source.
Closes governance drift detected during sameAs audit on 2026-05-11.
Per protected-pages.md "Brand Defence Notes", every entity profile URL
must appear both in structured data AND as a crawlable HTML link.

- github.com/aafre/resume-builder was in all 3 schemas (index.html
  WebApplication, Organization, schemaGenerators.ts SoftwareApplication)
  but missing from Footer crawlable links.
- trustpilot.com/review/easyfreeresume.com appeared only as a styled
  trust badge with FaStar icon; missing as a plain text anchor for
  crawlers. Badge retained alongside new text link.
…cations

Per protected-pages.md "Brand Defence Notes", the YouTube tutorial video
"This Free Resume Builder Shouldn't Exist" (uploaded 2026-02-28) must be
referenced in entity cross-references. It was already linked from /about
embed but absent from all sameAs arrays — drift detected on 2026-05-11.

- index.html WebApplication sameAs (line 208)
- index.html Organization sameAs (line 230)
- schemaGenerators.ts SoftwareApplication sameAs (line 29)

Strengthens entity-resolution signal for Knowledge Graph and AI Overview
citation. Per Gemini Deep Research 2026-05-11, YouTube accounts for 18.2%
of AIO citations in 2026, overtaking Reddit in many verticals.
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements several SEO improvements and content updates, such as adding FAQ structured data and 'answer-first' blocks to blog posts, updating social links in the footer and schema, and refining SEO metadata for job pages. Feedback was provided to address inconsistencies between the sitemap's last modification dates and the component update dates to ensure accurate search engine indexing.

{ loc: '/blog/introducing-prepai-ai-interview-coach', priority: 0.5, changefreq: 'monthly', lastmod: '2026-01-25' },
{ loc: '/blog/how-to-write-a-resume-guide', priority: 0.5, changefreq: 'monthly', lastmod: '2026-03-22' },
{ loc: '/blog/best-free-resume-builders-2026', priority: 0.5, changefreq: 'monthly', lastmod: '2026-03-05' },
{ loc: '/blog/best-free-resume-builders-2026', priority: 0.5, changefreq: 'monthly', lastmod: '2026-04-11' },
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The lastmod date for this blog post in the sitemap (2026-04-11) is inconsistent with the lastUpdated date defined in the component (2026-05-11). Since this PR introduces significant content changes (FAQ schema and answer-first blocks) as of May 11, the sitemap should be updated to reflect this to ensure search engines are correctly notified of the refresh, which is critical for maintaining the SEO value of high-ranking pages.

Suggested change
{ loc: '/blog/best-free-resume-builders-2026', priority: 0.5, changefreq: 'monthly', lastmod: '2026-04-11' },
{ loc: '/blog/best-free-resume-builders-2026', priority: 0.5, changefreq: 'monthly', lastmod: '2026-05-11' },
References
  1. Preserve and optimize SEO ranking signals by ensuring metadata like lastmod dates are accurate and synchronized with content updates.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gemini-code-assist Good catch — fixed in 35d5a938. Both Best-Builders and FlowCV lastmod entries updated to 2026-05-11 to match the content refresh shipped in 2472c5e. Per CLAUDE.md "Blog Page Update Checklist" these must stay synced.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the update, @aafre. I have verified that the lastmod dates in resume-builder-ui/src/data/sitemapUrls.ts for /blog/best-free-resume-builders-2026 and /blog/flowcv-vs-easy-free-resume have been synchronized to 2026-05-11 in accordance with the project's SEO checklist. This ensures search engines receive consistent signals regarding the recent content refresh.

{ loc: '/blog/enhancv-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-02-04' },
{ loc: '/blog/canva-resume-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-02-10' },
{ loc: '/blog/flowcv-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-02-04' },
{ loc: '/blog/flowcv-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-04-11' },
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The lastmod date for the FlowCV comparison page in the sitemap (2026-04-11) does not match the lastUpdated date in the component (2026-05-11). These should be synchronized to provide accurate signals to search engine crawlers regarding the latest content updates, supporting the repository's priority of preserving SEO integrity.

Suggested change
{ loc: '/blog/flowcv-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-04-11' },
{ loc: '/blog/flowcv-vs-easy-free-resume', priority: 0.5, changefreq: 'monthly', lastmod: '2026-05-11' },
References
  1. Maintain accurate sitemap metadata to ensure search engines receive correct signals, consistent with the goal of protecting search engine ranking signals.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gemini-code-assist Fixed in 35d5a938 along with the Best-Builders entry. Both lastmod dates now match the content's lastUpdated of 2026-05-11.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the update, aafre. I have verified the changes in 35d5a938 and the sitemap lastmod dates are now correctly synchronized with the content's lastUpdated values. This ensures search engines receive consistent signals for these pages.

@aafre aafre mentioned this pull request May 13, 2026
4 tasks
…dates

Both pages were updated 2026-05-11 with FAQPage schema and answer-first
GEO blocks (commit 2472c5e), but the sitemap lastmod entries still showed
2026-04-11 from the prior CTR pass. Per CLAUDE.md "Blog Page Update
Checklist", dateModified and sitemap lastmod must be synced so search
engines crawl the refreshed content.

Caught by gemini-code-assist review on PR #523.
aafre added a commit that referenced this pull request May 25, 2026
release: post-cliff bundle — integration of #523 + #526 + #529 for dev verification
@aafre aafre merged commit d8dfb16 into main May 25, 2026
6 checks passed
@aafre
Copy link
Copy Markdown
Owner Author

aafre commented May 25, 2026

Shipped via #532 (post-cliff bundle → main). Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant