> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cfosilvia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# October 2026 audit fixes

# October 2026 Ahrefs fixes for review

Branch: `SEO-fixes-October-2026`
Base at branch creation: `origin/staging`, `2a43642790981be4a1ca4530d3f405f2b185e002`
Pre-merge review base: `origin/staging`, `686ba1b8240e520b355f0ca4920eff9496d0a9f2` (October 12).
Tracking: [CFO-9417](https://linear.app/cfosilvia/issue/CFO-9417)
Evidence: Ahrefs Site Audit project **10266171**, completed **2026-10-09 18:22:44 UTC**. Health **81**, 647 internal URLs, 120 URLs with errors, and 44 active issue categories/scopes. Counts overlap.

## Current scope: original final pages and app behavior, with homepage pre-loading

Updated October 12 after the user's explicit clarification that homepage pre-loading content can stay, provided the original final page is preserved. The shared loading introduction is restored only while the homepage experiment resolves or its Suspense boundary is pending. Once ready, the introduction is fully removed and the original V3, V4, V5 or Framer handoff renders. The final page's body text, layout, styles, images, cards, controls and interactions retain their original implementation. Other retained changes are public SEO metadata, sitemap/crawler output, structured data and corrections to existing link destinations.

The only component changes are the homepage router, its loading introduction and its regression tests. The full branch diff is empty for stylesheets, `app/(app)/`, `app/layout.tsx`, `app/metadata.ts`, `app/(public)/layout.tsx`, `middleware.ts`, API routes, hooks, and contexts. Sign-in, signup, community sign-in and SMS opt-in also match the base. Existing calculator and quiz logic is unchanged. Public metadata is isolated in `lib/seo/public-metadata.ts`; the original app helper and runtime-origin behavior are preserved. Private URLs are removed only from the public sitemap, without changing their access controls or pages.

The user authorized a PR and merge to staging on October 12. Production release, CMS publication, live IndexNow submission and outbound user messages remain outside scope. Workbook research, reminders and unrelated reporting are outside the branch. Ahrefs MCP was checked again before opening the PR and still reports the October 9 crawl; production release and a fresh crawl are required before claiming live findings have cleared.

## Retained SEO fixes

| Change | Scope and effect |
| - | - |
| Homepage pre-loading | Restores a shared H1, explanatory copy and public resource links in the initial HTML. They sit inside `<noscript>`, so browsers keep a blank loading screen and only non-JS crawlers and visitors see them (CFO-9617). Both `app/(home)/page.tsx` and `components/home-landing-router.tsx` use `components/landing/landing-loading-content.tsx`. It has no effects or arm-specific analytics. The loading DOM is replaced completely after readiness; final landing components and Framer tracking behavior match the base. With JavaScript disabled, this remains the usable homepage view. |
| Public sitemap | Keeps the 18 authenticated destinations excluded and removes Wrapped. Current staging independently removed the 18 authenticated destinations before this PR, so those removals are not duplicated in the final PR diff. Adds Contact, FAQ, Security and the six current job openings. Uses canonical HTTPS www URLs. |
| Canonical host | Public metadata, blog/AI Lab structured data, crawler indexes and IndexNow use `https://www.cfosilvia.com`. App metadata and runtime URLs keep their original configuration. The homepage layout adds metadata only; the separately approved loading-state change is described above. |
| Public titles and descriptions | Shortens only overlong prompt titles/descriptions, improves short public marketing/legal descriptions, and bounds overlong blog/AI Lab search previews to 160 characters. Existing in-range copy is preserved, including both AI Lab titles. No visible headings, paragraphs or CMS article bodies change. Sign-in/signup metadata edits have been withdrawn. |
| Job metadata | Each known opening gets its own title, description and canonical. Unknown jobs receive non-indexable metadata while retaining the existing client-rendered “Job Not Found” screen; the new server-side not-found override was removed. |
| SMS terms and Security metadata | Adds self-canonicals and descriptive titles in place of the short inherited “Silvia” title. The original in-range descriptions are preserved. No legal-navigation entry or visible content is added. |
| Assessment social metadata | Restores the missing Open Graph image and large-image Twitter metadata on seven public assessments, using the existing artwork. On-page images and quiz UI are unchanged. |
| Dataset structured data | Adds the tax benchmark Dataset's required description and optional creator inside JSON-LD. Google's test validated the local Article and Dataset. No research-page copy or link section changes remain. |
| Existing blog link destinations | Normalizes apex/HTTP Silvia URLs to HTTPS www while preserving paths, queries, fragments, article text, CTA labels and renderer behavior. External hosts and subdomains are untouched. |
| Existing source-link destinations | Corrects four broken destinations and eleven redirect references. The displayed labels and surrounding text are restored to their original values. See the exact destinations below. |
| IndexNow host consistency | Aligns the submission host/key location with canonical URLs. Tests mock the request; production configuration and delivery have not been changed or verified. Ahrefs's 16 records say `Indexnow_off`, which describes its auto-submission setting rather than proving that this integration failed. |

## Withdrawn to preserve visuals and app behavior

These earlier fixes are no longer in the net branch diff and must not be reported as resolved:

* Prompt topic index and related-prompt rotation: the original directory and related cards are restored. The 82 orphan prompt findings remain open; the sitemap alone does not resolve an orphan-page issue.
* Institution-guide navigation, related quiz/calculator changes and the research cross-link: all original sections, cards and destinations are restored. The 41 main-site pages with one incoming followed link remain candidates for a separately approved visible change; the 42nd is the external trust center.
* About-page H1 conversion: the original paragraph tag is restored, leaving that heading finding open.
* New SMS terms navigation entry: removed. Its metadata and existing sitemap entry remain, but the missing internal link is not claimed as fixed.
* Wrapped, sign-in, signup, community sign-in, SMS opt-in and shared public-layout metadata changes: fully reverted to avoid changing app-adjacent routes or inherited behavior. Wrapped remains excluded from the public sitemap only.
* The companion navigation-skill patch for prompt and institution navigation remains withdrawn. The existing [local patch](../patches/seo-fixes-october-2026-navigation.patch) documents only the permitted homepage pre-loading state and has not been published. In the final merge instruction, Bilal explicitly said “dont make any changes to the skills folder.” This overrides the agent skills-sync checklist for this request: no skills-folder or skills-repository changes are part of this merge. The prepared patch is unchanged and its publication is not claimed. Required GitHub review rules still apply.

## Exact sitemap exclusions

The 18 authentication destinations removed are `/accounts`, `/chat`, `/assets-liabilities`, `/private-investments`, `/public-investments`, `/research`, `/vault`, `/precious-metals`, `/product-updates`, `/crypto-holdings`, `/real-estate`, `/transactions`, `/goals`, `/collectibles`, `/vehicles`, `/radar`, `/liabilities`, and `/dashboard`. `/wrapped` is also excluded. All retain their existing routes and access controls.

## Source-link repairs

| Source page | Old target/problem | New destination |
| - | - | - |
| [Financial planning assessment](https://www.cfosilvia.com/financial-planning-assessment) | CFPB `/consumer-tools/budgeting/` returned 404 | [CFPB budget guide](https://www.consumerfinance.gov/archive/blog/budgeting-how-to-create-a-budget-and-stick-with-it/) |
| [Debt knowledge quiz](https://www.cfosilvia.com/debt-knowledge-quiz), question and source list | Wrong CFPB PDF filename returned 404 | [CFPB reducing-debt worksheet](https://files.consumerfinance.gov/f/documents/cfpb_ymyg-toolkit_reducing-debt-worksheet.pdf) |
| [Fifth Third connection guide](https://www.cfosilvia.com/help/connect-fifth-third) | Login path incorrectly used `locations.53.com` and returned 404 | [Fifth Third online banking](https://onlinebanking.53.com/olb/login) |
| [Student loan calculator](https://www.cfosilvia.com/financial-calculators/student-loan) | Old StudentAid.gov article redirected to `/error/not-found` | [Federal Student Aid repayment calculator](https://studentaid.gov/repayment-calculator/) |
| [HELOC calculator](https://www.cfosilvia.com/financial-calculators/heloc) | Renamed CFPB page | [CFPB second mortgages and HELOCs](https://www.consumerfinance.gov/ask-cfpb/what-is-a-second-mortgage-loan-or-junior-lien-en-105/) |
| [Debt consolidation calculator](https://www.cfosilvia.com/financial-calculators/debt-consolidation) | Renamed CFPB page | [CFPB debt consolidation guidance](https://www.consumerfinance.gov/ask-cfpb/what-do-i-need-to-know-if-im-thinking-about-consolidating-my-credit-card-debt-en-1861/) |
| [Tax intelligence test](https://www.cfosilvia.com/tax-intelligence-test) | IRS `/individuals` redirect | [IRS individual tax filing](https://www.irs.gov/individual-tax-filing) |
| [Cookie policy](https://www.cfosilvia.com/cookies) | Seven vendor policy redirects | [Clerk](https://clerk.com/legal/privacy), [Cloudflare](https://www.cloudflare.com/privacypolicy), [Plaid](https://plaid.com/legal/), [Coinbase](https://www.coinbase.com/legal/privacy), [Sanity](https://www.sanity.io/legal/privacy), [Sentry](https://sentry.io/privacy/), [Vercel](https://vercel.com/legal/privacy-notice) |
| [Data subject requests](https://www.cfosilvia.com/data-subject-requests) | Brazilian authority apex redirect | [ANPD](https://www.gov.br/anpd) |

CFPB replacement content was retrievable through the web source tool; direct command-line requests from this environment were blocked with 403. Fifth Third’s replacement returned HTTP 200. A publisher can still block Ahrefs independently of whether a reference is correct.

## Remaining editorial or external work

1. **Nine blog articles share a dead FINRA citation.** The missing destination is `https://www.finra.org/investors/insights/get-off-bench-look-benchmarks`. No verified relocation of that exact article was found. Selecting a different publication also requires reviewing the claim and citation label in the CMS. This branch does not silently substitute an unrelated citation. Affected articles:
   * [When to rebalance](https://www.cfosilvia.com/blog/when-to-rebalance-portfolio)
   * [Analyze an investment portfolio](https://www.cfosilvia.com/blog/how-to-analyze-investment-portfolio)
   * [Portfolio concentration risk](https://www.cfosilvia.com/blog/portfolio-concentration-risk)
   * [Investment fees and long-term wealth](https://www.cfosilvia.com/blog/investment-fees-long-term-wealth)
   * [Measure diversification](https://www.cfosilvia.com/blog/measure-portfolio-diversification)
   * [Choose a benchmark](https://www.cfosilvia.com/blog/choosing-portfolio-benchmark)
   * [Annual portfolio review](https://www.cfosilvia.com/blog/annual-portfolio-review-checklist)
   * [Track performance across brokerages](https://www.cfosilvia.com/blog/track-investment-performance-across-brokerages)
   * [Calculate allocation across accounts](https://www.cfosilvia.com/blog/calculate-asset-allocation-multiple-accounts)
2. **Two authored CMS metadata items remain:** the long title on [What is a personal CFO?](https://www.cfosilvia.com/blog/what-is-a-personal-cfo-responsibilities-costs-and-alternatives) and the short description on [Silvia Reborn](https://www.cfosilvia.com/blog/silvia-reborn). These need editorial changes in Sanity. The branch does not hardcode per-article content overrides.
3. **Trust center:** [trust.cfosilvia.com](https://trust.cfosilvia.com/) needs server-visible content/H1/navigation, a language attribute, `og:url`, description cleanup and sitemap review in its separate hosting system. This Next.js repository does not serve that host.
4. **Investor relations:** [investors.cfosilvia.com](https://investors.cfosilvia.com/) and two news-release URLs returned 403 to Ahrefs. The host/crawler policy needs verification; these are not internal 404s that should be redirected away.
5. **Eight external 403 destinations** need normal-browser and crawler-policy verification: CNBC, PNC investor news, Rocket Money, SBA loan guidance, two Chime help articles, a Department of Labor retirement PDF and the Colorado attorney-general site. Valid citations should not be replaced just to bypass a bot restriction.
6. **Other external redirects:** USAA’s `akredirect` parameter is vendor behavior; CMS-owned Monarch, Origin, FINRA and other references require their own editorial pass. They are not treated as broken merely because they redirect.
7. **Timing and ranking notices:** Three crawler response times of roughly 1.1–1.3 seconds, eight estimated organic-traffic drops, a lost top-ten position, and search-engine title rewrites do not establish a code defect. Recheck after release and use Search Console/field performance data before attributing changes to SEO work.
8. **IndexNow delivery:** inspect the configured production key/webhook and recrawl after release. The existing key route and Sanity publish submission flow are present. Ahrefs reports its own auto-submission as off, not a confirmed failure of this integration.

## Verification of the retained scope

* **199 tests passed across 25 files** in the preceding scope-reduction pass, before restoring homepage pre-loading. Coverage includes public/app metadata isolation, sitemap, blog metadata/link normalization, prompt metadata, institution content, calculators and assessments. Removed tests belonged exclusively to the withdrawn UI/helpers; original tests were restored with their original implementation.
* **21 landing tests passed across four files** after restoring pre-loading. The router tests cover complete removal of the loading DOM for all three React variants and the Framer handoff, including tracked and untracked QA visits. Existing experiment-hook, Framer-proxy and Framer-handoff tests also pass.
* **Final-state comparison:** the ready-state router branches and Framer tracking props exactly match the branch base. V3, V4, V5, their component directories, the Framer handoff/proxy and all stylesheets are unchanged.
* **Full TypeScript check passed** after `next typegen`, using an 8 GB Node heap.
* **ESLint passed on all 47 changed TypeScript/TSX files** in the preceding pass and on all four restored/updated homepage files in this pass, with zero errors or warnings.
* **JSX comparison before the pre-loading exception:** parsed each changed TSX file against the branch base and compared all rendered JSX. All **24 files** matched, allowing only the corrected `href` values on two existing legal pages. Those files remain unchanged by the restoration; the homepage fallback/router and new loading component are the explicitly approved exception. New metadata-only layouts return their children without adding markup. The research schema change is outside visible JSX.
* **Content comparison:** all five changed calculator/quiz/guide content catalogs matched their originals after normalizing citation URL fields. Labels, prose, questions, scoring inputs and related cards are unchanged.
* **App scope:** no net changes to final landing components, styles, authenticated routes, authentication pages, root/shared layouts, middleware, API routes, hooks or contexts. The dedicated public metadata helper has no signed-in consumer. `getSiteUrl` remains unchanged; `getAbsoluteUrl` consumers are public SEO/crawler surfaces.
* **Branch diff whitespace check passed** against the original base. Restoring the original signup file also restores its pre-existing blank line at EOF; that file is absent from the net branch diff.
* **Earlier schema validation remains applicable:** [Google's code-mode test](https://search.google.com/test/rich-results/result?id=D3XvzuC-EgCW1c0LmyNSCA) validated one Article and one Dataset from the local page's JSON-LD. That markup is unchanged by this scope reduction. This is not evidence of a production deployment.

The earlier prompt/institution browser checks and internal-link coverage counts describe changes that remain withdrawn. They are not validation claims for the final branch. No production build, deployment, authenticated end-to-end test or fresh browser screenshot comparison was run for this scope adjustment. Final landing source, render branches, styles and app scope were verified directly against the branch base; automated transition tests verify that the loading introduction is removed.

The 40 intentional blog pagination/filter `noindex, follow` URLs, canonical host redirects, login redirects/query parameters, and vendor-managed Clerk script redirect remain unchanged. Ranking/latency notices still need measurement rather than speculative code changes.

See [the original audit inventory](./october-2026-audit-inventory.md) for all 44 categories/scopes and source/target pairs. It remains a historical audit snapshot, not a list of completed fixes. Google’s [Dataset documentation](https://developers.google.com/search/docs/appearance/structured-data/dataset) supports the retained schema fields.

## Pre-merge validation on current staging

* Merged current staging into the SEO branch and resolved the only conflict in the sitemap, retaining staging’s protected-route exclusions and their explanatory comment.
* 221 tests passed across 29 files, including the new sitemap guard already on staging. Full TypeScript and ESLint on all 51 changed TypeScript files passed.
* Compared 24 rendered TSX files against current staging: unchanged markup except corrected legal link hrefs. Five content catalogs differ only in citation URLs. Homepage ready-state branches and all final landing components are unchanged. Authenticated routes, authentication pages, middleware, hooks, API routes and styles have no PR diff.
* Vercel project identity confirmed: `silvia-web`, `prj_hqjfEL7qOIJHYrbz3QjRWxibEAyZ`, team `team_WjUwLHzJL2h5B24WQcUmooc1`. Production uses `main`; `staging` maps to the separate staging environment at `staging.cfosilvia.com`.

## Final copy-preservation review — October 12

Only titles outside the audit length range are changed. The prompt-title guard includes Next.js’s inherited ` | Silvia` suffix in its 70-character ceiling. Descriptions already within 160 characters retain their exact wording. These are audit guardrails, not a promise of search-engine display width or ranking.

* Restored 143 in-range prompt titles, 104 in-range prompt descriptions and both in-range AI Lab titles. The remaining 14 prompt title and 53 prompt description changes reflect the current 157-entry catalog; the October 9 production crawl predates some catalog changes already on staging.
* The prompt directory’s current original title is 71 characters (`150+`), versus 70 characters (`140`) in the old crawl, so its shortening is retained.
* Preserved the original 136-character descriptions on SMS terms and Security; only their short titles and canonical URLs change. Blog preview truncation leaves in-range copy untouched.
* Validation: 222 tests across 29 files, full TypeScript and changed-file ESLint passed. Twenty-eight local routes returned 200; their rendered titles match the final metadata, including all 14 shortened prompt titles and the two restored AI Lab titles. Skills folders, the prepared companion patch and the signed-in application remain unchanged in this follow-up.

### Every retained title change

Before values below are the current staging titles, including inherited suffixes. After values were read from rendered HTML. Job titles have no inherited suffix at their nested layout level.

| Page | Before | After | Characters |
| - | - | - | -: |
| /about | About \| Silvia | About Silvia: Your Personal AI CFO \| Silvia | 14 → 43 |
| /blog | Blog \| Silvia | Personal Finance & Investing Blog \| Silvia | 13 → 42 |
| /prompts | 150+ Financial Questions to Ask Silvia \| AI CFO Prompt Library \| Silvia | 150+ Financial Questions \| AI CFO Prompt Library \| Silvia | 71 → 57 |
| /sms-terms | Silvia | SMS Terms and Conditions \| Silvia | 6 → 33 |
| /help/security | Silvia | How Silvia Protects Your Financial Data \| Silvia | 6 → 48 |
| /careers/mobile-app-developer | Job Details | Mobile App Developer Careers | 11 → 28 |
| /careers/senior-full-stack-engineer | Job Details | Full Stack Engineer Careers | 11 → 27 |
| /careers/applied-ai-engineer | Job Details | Applied AI Engineer Careers | 11 → 27 |
| /careers/product-manager | Job Details | Product Manager Careers | 11 → 23 |
| /careers/ui-ux-designer-qa-lead | Job Details | UI/UX Designer & QA Lead Careers | 11 → 32 |
| /careers/consumer-analytics-growth-lead | Job Details | Consumer Analytics & Growth Lead Careers | 11 → 40 |
| /prompts/check-whether-im-taking-too-much-risk | Check whether I’m taking too much risk \| Silvia Prompt Library \| Silvia | Check whether I’m taking too much risk \| Silvia | 71 → 47 |
| /prompts/tell-me-what-changed-and-what-to-do-next | Tell me what changed and what to do next \| Silvia Prompt Library \| Silvia | Tell me what changed and what to do next \| Silvia | 73 → 49 |
| /prompts/find-recurring-expenses-worth-reviewing | Find recurring expenses worth reviewing \| Silvia Prompt Library \| Silvia | Find recurring expenses worth reviewing \| Silvia | 72 → 48 |
| /prompts/find-out-when-mortgage-insurance-comes-off | Find out when mortgage insurance comes off \| Silvia Prompt Library \| Silvia | Find out when mortgage insurance comes off \| Silvia | 75 → 51 |
| /prompts/check-whether-my-portfolio-matches-my-goals | Check whether my portfolio matches my goals \| Silvia Prompt Library \| Silvia | Check whether my portfolio matches my goals \| Silvia | 76 → 52 |
| /prompts/review-tax-loss-opportunities-carefully | Review tax-loss opportunities carefully \| Silvia Prompt Library \| Silvia | Review tax-loss opportunities carefully \| Silvia | 72 → 48 |
| /prompts/can-i-afford-a-home-without-derailing-everything-else | Can I afford a home without derailing everything else? \| Silvia Prompt Library \| Silvia | Can I afford a home without derailing everything else? \| Silvia | 87 → 63 |
| /prompts/calculate-efficient-frontier-alternatives | Calculate efficient-frontier alternatives \| Silvia Prompt Library \| Silvia | Calculate efficient-frontier alternatives \| Silvia | 74 → 50 |
| /prompts/analyze-capital-allocation | Analyze capital allocation and incentives \| Silvia Prompt Library \| Silvia | Analyze capital allocation and incentives \| Silvia | 74 → 50 |
| /prompts/audit-account-ownership-and-beneficiaries | Audit account ownership and beneficiaries \| Silvia Prompt Library \| Silvia | Audit account ownership and beneficiaries \| Silvia | 74 → 50 |
| /prompts/create-a-family-financial-continuity-file | Create a family financial continuity file \| Silvia Prompt Library \| Silvia | Create a family financial continuity file \| Silvia | 74 → 50 |
| /prompts/turn-my-spending-into-a-budget-spreadsheet | Turn my spending into a budget spreadsheet \| Silvia Prompt Library \| Silvia | Turn my spending into a budget spreadsheet \| Silvia | 75 → 51 |
| /prompts/send-me-a-monthly-report-with-a-spreadsheet | Send me a monthly report with a spreadsheet \| Silvia Prompt Library \| Silvia | Send me a monthly report with a spreadsheet \| Silvia | 76 → 52 |
| /prompts/monitor-financial-independence-date | Monitor my financial-independence date \| Silvia Prompt Library \| Silvia | Monitor my financial-independence date \| Silvia | 71 → 47 |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.