From e4c86384dcce71cedcc25f723d234c56c0cf266e Mon Sep 17 00:00:00 2001 From: Antoine Phan Date: Mon, 25 Aug 2025 11:35:18 -0400 Subject: [PATCH] Search Engine Optimization --- src/components/SeoMetaTags.svelte | 13 +++++++++++++ src/routes/+page.server.ts | 5 +++-- src/routes/+page.svelte | 8 ++++++-- src/routes/council/+page.server.ts | 6 ++++-- src/routes/council/+page.svelte | 8 +++++++- src/routes/events/+page.server.ts | 3 ++- src/routes/events/+page.svelte | 8 +++++++- src/routes/join/+page.server.ts | 5 +++++ src/routes/join/+page.svelte | 19 ++++++++++++------- src/routes/r/[shortname]/+page.svelte | 2 ++ src/routes/resources/+page.server.ts | 5 +++-- src/routes/resources/+page.svelte | 13 +++++++++---- 12 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 src/components/SeoMetaTags.svelte create mode 100644 src/routes/join/+page.server.ts diff --git a/src/components/SeoMetaTags.svelte b/src/components/SeoMetaTags.svelte new file mode 100644 index 0000000..a909758 --- /dev/null +++ b/src/components/SeoMetaTags.svelte @@ -0,0 +1,13 @@ + + + + {title} + + + diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 7e31d6a..2c28ebe 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -23,7 +23,7 @@ const sponsorQuery = `*[_type=="sponsors"]{ "logo": logo.asset->url+"?h=100&fm=webp" }`; -export const load = async () => { +export const load = async ({url}) => { /** * @description Response data type based on the `homepageQuery` above. * Note that `description` is a rich/portable text type @@ -37,6 +37,7 @@ export const load = async () => { councilPhoto: homepageResp.councilPhoto, faqs: homepageResp.faqs, allOHs: officeHourResp, - sponsors: sponsorsResp + sponsors: sponsorsResp, + canonical: url.href }; }; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index efa1d05..6f88a78 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -4,6 +4,7 @@ import RichText from 'components/RichText.svelte'; import OhSchedule from 'components/OHSchedule.svelte'; import Link from 'components/Link.svelte'; + import SeoMetaTags from 'components/SeoMetaTags.svelte'; import { fade } from 'svelte/transition'; /** loading things from the server side */ @@ -14,7 +15,8 @@ let progress = 63.33; - McGill ECSESS + +
@@ -23,7 +25,9 @@

{#each 'We are ECSESS!' as char, i} - {char} + {char} {/each}

diff --git a/src/routes/council/+page.server.ts b/src/routes/council/+page.server.ts index ede79b8..7867909 100644 --- a/src/routes/council/+page.server.ts +++ b/src/routes/council/+page.server.ts @@ -17,10 +17,12 @@ const councilGoofyPicQuery = `*[_type == "homepage"]{ "url": councilGoofyPic.asset->url+"?h=1200&fm=webp" }[0]`; -export const load = async () => { +export const load = async ({ url }) => { let councilMembers: CouncilMember[] = await getFromCMS(councilQuery); + return { members: councilMembers, - councilGoofyPic: await getFromCMS(councilGoofyPicQuery) + councilGoofyPic: await getFromCMS(councilGoofyPicQuery), + canonical: url.href }; }; diff --git a/src/routes/council/+page.svelte b/src/routes/council/+page.svelte index 89ad7e7..f206796 100644 --- a/src/routes/council/+page.svelte +++ b/src/routes/council/+page.svelte @@ -5,6 +5,7 @@ import type { CouncilMember } from '$lib/schemas'; import { fly } from 'svelte/transition'; import Button from 'components/Button.svelte'; + import SeoMetaTags from 'components/SeoMetaTags.svelte'; let { data } = $props(); @@ -38,7 +39,12 @@ } - ECSESS council + +

Meet the council!

diff --git a/src/routes/events/+page.server.ts b/src/routes/events/+page.server.ts index 4cf80bb..4025447 100644 --- a/src/routes/events/+page.server.ts +++ b/src/routes/events/+page.server.ts @@ -10,8 +10,9 @@ const eventQuery = `*[_type == "events"]{ "lastUpdated": _updatedAt, }`; -export const load = async () => { +export const load = async ({ url }) => { return { events: await getFromCMS(eventQuery), + canonical: url.href }; }; diff --git a/src/routes/events/+page.svelte b/src/routes/events/+page.svelte index 2fa2e81..b86243a 100644 --- a/src/routes/events/+page.svelte +++ b/src/routes/events/+page.svelte @@ -1,10 +1,16 @@ - ECSESS Events + +

Events

diff --git a/src/routes/join/+page.server.ts b/src/routes/join/+page.server.ts new file mode 100644 index 0000000..8351742 --- /dev/null +++ b/src/routes/join/+page.server.ts @@ -0,0 +1,5 @@ +export const load = async ({ url }) => { + return { + canonical: url.href + }; +}; diff --git a/src/routes/join/+page.svelte b/src/routes/join/+page.svelte index 055e86d..69b0002 100644 --- a/src/routes/join/+page.svelte +++ b/src/routes/join/+page.svelte @@ -1,19 +1,24 @@ - Join ECSESS !!! +

Want to join ECSESS Council?

+

Come back around March for application period!

{#if isElectionTime} - - A guide to involvement with ECSESS and its subcommittees (The Factory, IEEE McGill, CodeJam). - - {:else} -

Come back around March for application period!

- {/if} + + A guide to involvement with ECSESS and its subcommittees (The Factory, IEEE McGill, CodeJam). + + {:else}{/if}
diff --git a/src/routes/r/[shortname]/+page.svelte b/src/routes/r/[shortname]/+page.svelte index 243578b..9dc51bc 100644 --- a/src/routes/r/[shortname]/+page.svelte +++ b/src/routes/r/[shortname]/+page.svelte @@ -3,6 +3,8 @@ let { data } = $props(); + Hmm... you're not supposed to be here :/ +

Can't redirect you to "r/{data.shortname}"!


diff --git a/src/routes/resources/+page.server.ts b/src/routes/resources/+page.server.ts index b627263..f2a07b8 100644 --- a/src/routes/resources/+page.server.ts +++ b/src/routes/resources/+page.server.ts @@ -8,9 +8,10 @@ const query = `*[_type == "resources"]{ description, }`; -export const load = async () => { +export const load = async ({ url }) => { const resources: Resource[] = await getFromCMS(query); return { - resources: resources + resources: resources, + canonical: url.href }; }; diff --git a/src/routes/resources/+page.svelte b/src/routes/resources/+page.svelte index 0ba6188..9174874 100644 --- a/src/routes/resources/+page.svelte +++ b/src/routes/resources/+page.svelte @@ -1,19 +1,24 @@ - Resources +

Resources

{#each data.resources as re} - - {re.description} - + + {re.description} + {/each}