From 5602c51cacf999967eef116c854a9c2b255a71a9 Mon Sep 17 00:00:00 2001 From: mohanadft Date: Tue, 14 Jul 2026 12:31:40 +0300 Subject: [PATCH 1/4] fix(seo): Phase 1 hygiene fixes for -new draft pages Addresses the Critical/High findings from the -new pages SEO/GEO/AEO audit that are safe to ship while pages stay noindexed: - Remove deprecated HowTo/HowToStep schema (retired by Google Sept 2023) from incubator-new, mentorship-new, volunteer-new - Add a shared #organization @id to HomeLayout's NonprofitOrganization node and reference it from donate-new, donate-2-new, media-new, and contact-new so their page-level schema fragments merge into one entity instead of creating duplicate/orphan Organization nodes - Add a canonicalUrl override prop to HomeLayout and point donate-2-new at /donate to codify the primary/fallback relationship before either page goes live - Fix 5 titles missing the site's "| Tech for Palestine" brand suffix (endorsements, london-gathering, legal, privacy-policy, terms) - Trim 2 meta descriptions over the 160-char SERP truncation limit (e4p, london-gathering) - Fix home-new title capitalization/length and drop the redundant "T4P" prefix on tools-new's title --- src/layouts/HomeLayout.astro | 10 ++++--- src/pages/contact-new.astro | 10 +++++-- src/pages/donate-2-new.astro | 7 +++-- src/pages/donate-new.astro | 2 +- src/pages/e4p-new.astro | 2 +- src/pages/endorsements-new.astro | 2 +- src/pages/home-new.astro | 2 +- src/pages/incubator-new.astro | 41 ---------------------------- src/pages/legal-new.astro | 6 +++- src/pages/london-gathering-new.astro | 4 +-- src/pages/media-new.astro | 3 +- src/pages/mentorship-new.astro | 29 -------------------- src/pages/privacy-policy-new.astro | 6 +++- src/pages/terms-new.astro | 6 +++- src/pages/tools-new.astro | 2 +- src/pages/volunteer-new.astro | 29 -------------------- 16 files changed, 40 insertions(+), 121 deletions(-) diff --git a/src/layouts/HomeLayout.astro b/src/layouts/HomeLayout.astro index 4e0e233..e2507b7 100644 --- a/src/layouts/HomeLayout.astro +++ b/src/layouts/HomeLayout.astro @@ -12,6 +12,7 @@ interface Props { description?: string; image?: string; noindex?: boolean; + canonicalUrl?: string; } const { @@ -19,18 +20,19 @@ const { description = "T4P is an incubator for Palestine advocacy projects.", image = "https://techforpalestine.org/t4p-social-logo.png", noindex = false, + canonicalUrl: canonicalUrlOverride, } = Astro.props; const membershipLive = getEnv("MEMBERSHIP_LIVE", Astro.locals) === "true"; -const canonicalUrl = new URL( - Astro.url.pathname, - Astro.site || "https://techforpalestine.org" -).toString(); +const canonicalUrl = + canonicalUrlOverride || + new URL(Astro.url.pathname, Astro.site || "https://techforpalestine.org").toString(); const organizationSchema = { "@context": "https://schema.org", "@type": "NonprofitOrganization", + "@id": "https://techforpalestine.org/#organization", name: "Tech for Palestine", url: "https://techforpalestine.org", logo: "https://techforpalestine.org/t4p-social-logo.png", diff --git a/src/pages/contact-new.astro b/src/pages/contact-new.astro index c94d7dd..838469a 100644 --- a/src/pages/contact-new.astro +++ b/src/pages/contact-new.astro @@ -15,9 +15,13 @@ const membershipLive = getEnv("MEMBERSHIP_LIVE", Astro.locals) === "true"; type="application/ld+json" set:html={JSON.stringify({ "@context": "https://schema.org", - "@type": "ContactPoint", - contactType: "customer support", - email: "contact@techforpalestine.org", + "@type": "NonprofitOrganization", + "@id": "https://techforpalestine.org/#organization", + contactPoint: { + "@type": "ContactPoint", + contactType: "customer support", + email: "contact@techforpalestine.org", + }, })} /> diff --git a/src/pages/donate-2-new.astro b/src/pages/donate-2-new.astro index a36d026..b933cc2 100644 --- a/src/pages/donate-2-new.astro +++ b/src/pages/donate-2-new.astro @@ -9,9 +9,10 @@ const membershipLive = getEnv("MEMBERSHIP_LIVE", Astro.locals) === "true"; ---