Skip to content

feat(seo): SEO/GEO/AEO audit fixes for -new draft pages#505

Merged
mohanadft merged 4 commits into
mainfrom
seo/geo-aeo-new-pages-audit-fixes
Jul 13, 2026
Merged

feat(seo): SEO/GEO/AEO audit fixes for -new draft pages#505
mohanadft merged 4 commits into
mainfrom
seo/geo-aeo-new-pages-audit-fixes

Conversation

@mohanadft

Copy link
Copy Markdown
Collaborator

Summary

Implements the fixes identified in a full SEO/GEO/AEO source-code audit of the 23 unpublished -new redesign pages (index-new excluded — different layout, not in scope). See the report generated during the audit for full page-by-page scores and findings.

  • Sitewide (HomeLayout.astro): added a NonprofitOrganization JSON-LD block (EIN, address, sameAs social links) that now auto-propagates to every -new page and 404; added a noindex prop so draft pages can opt out of indexing via <meta name="robots">.
  • Every -new page: noindex={true} applied — these are unpublished drafts, excluded from the sitemap but previously discoverable via extensive internal cross-linking with zero robots signal.
  • Structured data added only where real content backs it (no fabricated data): FAQPage (faq-new, membership-new), HowTo (incubator-new, volunteer-new), Event (events-new, london-gathering-new), Person (team-new, e4p-new), ItemList (projects-new, tools-new, help/hire-new), ContactPoint (contact-new), WebPage (privacy-policy-new, terms-new), press subjectOf (media-new).
  • SSR conversions: faq-new, ideas-new, events-new, projects-new, london-gathering-new, and membership-new's FAQ section switched from client:only="react" to client:load with server-fetched props, so primary content (FAQs, ideas, events, incubator projects, speakers/agenda) is now present in server-rendered HTML instead of invisible to crawlers and AI answer engines. membership-new's dues calculator intentionally stays client:only — it reads localStorage synchronously for an A/B test and isn't safe to SSR without a separate refactor.
  • contact-new: un-obfuscated the JS-injected email into a real server-rendered mailto: link.
  • Duplicate-title fix: volunteer-new no longer shares get-involved-new's exact <title>.
  • donate-new / donate-2-new: confirmed these are an intentional pairing (donate-new links to donate-2-new as an explicit fallback), not an accidental duplicate — retitled and documented the relationship rather than merging them.
  • home-new intentionally untouched: confirmed via a localStorage A/B-test flag and Plausible event that it's a live experiment, not an orphan draft. Any SEO changes there need a product/analytics-owner decision first.

A separate chore commit applies incidental repo-wide prettier formatting picked up while running pnpm format during this work — whitespace/line-wrap only, no logic changes.

Test plan

  • pnpm check — 0 errors, 0 warnings
  • Manually reviewed diffs for the security-sensitive changes (contact-new email rendering, projects-new server-side fetch reusing the existing PROJECTHUB_API_KEY/sanitizeUrl pattern from /api/projects.ts)
  • Visual QA of each touched -new page in a preview deploy (not yet done — these are draft/unpublished pages)
  • Confirm home-new's A/B test isn't affected (no changes made to this file, but worth a sanity check)

…meLayout

Adds NonprofitOrganization JSON-LD (EIN, address, sameAs social links) so
every -new draft page and 404 gets machine-readable entity data, and a
noindex prop so draft pages can opt out of indexing via robots meta.
Repo-wide whitespace/line-wrap normalization from a full pnpm format
run, incidental to the SEO/GEO/AEO audit-fix branch. No logic changes.
Applies the fixes identified in the full audit of the 23 unpublished
"-new" redesign pages (index-new excluded):

- noindex={true} on every page (drafts aren't in the sitemap but were
  discoverable via internal cross-linking with no robots signal)
- FAQPage, HowTo, Event, Person, ItemList, ContactPoint, and WebPage
  JSON-LD schema added wherever real, already-rendered content exists
  to back it — no fabricated data
- Converted client:only="react" islands to client:load with
  server-fetched props on faq-new, ideas-new, events-new, projects-new,
  london-gathering-new, and the FAQ portion of membership-new, so
  primary content (FAQs, ideas, events, incubator projects, speakers/
  agenda) is now present in server-rendered HTML instead of hidden
  from crawlers and AI fetchers. membership-new's dues calculator
  stays client:only (reads localStorage synchronously for an A/B
  test; unsafe to SSR without a separate refactor).
- Un-obfuscated the contact-new email so it's a real server-rendered
  mailto: link instead of JS-injected
- Fixed the volunteer-new/get-involved-new duplicate <title> collision
- Confirmed donate-new/donate-2-new are intentionally paired (donate-new
  links to donate-2-new as an explicit fallback), not an accidental
  duplicate; retitled and documented the relationship
- home-new intentionally left untouched: confirmed via localStorage
  A/B-test flag + Plausible event that it's a live experiment, not an
  orphan draft — any SEO changes there need a product/analytics call

Site-wide NonprofitOrganization schema and the noindex prop itself
were added to HomeLayout.astro in a prior commit on this branch.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 13, 2026

Copy link
Copy Markdown

Deploying website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 16258cb
Status: ✅  Deploy successful!
Preview URL: https://9b760049.website-aun.pages.dev
Branch Preview URL: https://seo-geo-aeo-new-pages-audit.website-aun.pages.dev

View logs

Fixes issues found in the full SEO/GEO/AEO audit of the -new page set:
- correct london-gathering-new's Event schema (EventScheduled -> EventCompleted)
  now that the event has concluded
- add missing noindex to home-new and endorsements-new for consistency with
  every other -new page
- add FAQPage schema to endorsements-new's existing FAQ content
- give faq-new a static fallback so FAQ content/schema survive a failed
  Notion fetch instead of silently disappearing
- add HowTo schema to mentorship-new, matching the pattern already used on
  volunteer-new and incubator-new
- add WebPage schema + last-updated date to legal-new, matching
  terms-new/privacy-policy-new
- rebrand thin/generic titles (FAQ, Events, Membership, Team & Board,
  T4P Incubator, Mentorship) and trim over-length meta descriptions
- add EIN disclosure to donate-2-new for parity with donate-new
- reframe a couple of declarative H2s as questions for AEO snippet eligibility
@mohanadft mohanadft merged commit ab42c8b into main Jul 13, 2026
5 checks passed
@mohanadft mohanadft deleted the seo/geo-aeo-new-pages-audit-fixes branch July 13, 2026 14:55
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