detached ff2a41e

feat: Add comprehensive SEO and meta tags for improved web presence

- Enhance +layout.svelte with detailed meta tags for SEO optimization
- Include Open Graph and Twitter card metadata
- Add language, viewport, and canonical link tags
- Update +layout.ts to provide default meta information for the project
- Set French language and localization attributes
commit
ff2a41efcbfdb228ba5d42c98824290b88d974cd
author
Kit · · 2025-02-17 07:03 UTC
parent
53dfa50
signature
SSH UnverifiedSHA256:H91DFuEG4jpk5edzLA4aUKkpv4zv9Q339ipRmkph6Tk The key is unknown
4 files · +40 -7
M .cursor/rules/global.mdc +1 -1
@@ -4,7 +4,7 @@ globs:
44 ---
55 # Debugging
66 - Always add console.debug for client sided code.
7-- Always add either console.log or follow the logger implementation if any server/backend code.
7+- Always add either console.log or follow the logger implementation if any for server/backend code.
88
99 # Language
1010 - The content of the app is in French but the code comments must be in English.⏎̸
@@ -4,7 +4,7 @@ globs:
4 ---4 ---
5 # Debugging5 # Debugging
6 - Always add console.debug for client sided code.6 - Always add console.debug for client sided code.
7-- Always add either console.log or follow the logger implementation if any server/backend code.7+- Always add either console.log or follow the logger implementation if any for server/backend code.
8 8
9 # Language9 # Language
10 - The content of the app is in French but the code comments must be in English.⏎̸10 - The content of the app is in French but the code comments must be in English.⏎̸
M .cursor/rules/svelte5.mdc +0 -5
@@ -2,11 +2,6 @@
22 description:
33 globs:
44 ---
5-cursor.directory
6-Generate rule
7-MCP Servers
8-Learn
9-
105 You are an expert in Svelte 5, SvelteKit, TypeScript, and modern web development.
116
127 Key Principles
@@ -2,11 +2,6 @@
2 description: 2 description:
3 globs: 3 globs:
4 ---4 ---
5-cursor.directory
6-Generate rule
7-MCP Servers
8-Learn
9-
10 You are an expert in Svelte 5, SvelteKit, TypeScript, and modern web development.5 You are an expert in Svelte 5, SvelteKit, TypeScript, and modern web development.
11 6
12 Key Principles7 Key Principles
M src/routes/+layout.svelte +29 -0
@@ -222,6 +222,35 @@
222222 });
223223 </script>
224224
225+<svelte:head>
226+ <title>{data.meta.title}</title>
227+ <meta name="description" content={data.meta.description} />
228+ <meta name="keywords" content={data.meta.keywords} />
229+ <meta name="language" content="French" />
230+ <html lang="fr" />
231+
232+ <!-- Open Graph / Facebook -->
233+ <meta property="og:locale" content={data.meta.locale} />
234+ <meta property="og:type" content={data.meta.type} />
235+ <meta property="og:url" content={data.meta.url} />
236+ <meta property="og:title" content={data.meta.title} />
237+ <meta property="og:description" content={data.meta.description} />
238+ <meta property="og:image" content={data.meta.ogImage} />
239+
240+ <!-- Twitter -->
241+ <meta property="twitter:card" content="summary_large_image" />
242+ <meta property="twitter:url" content={data.meta.url} />
243+ <meta property="twitter:title" content={data.meta.title} />
244+ <meta property="twitter:description" content={data.meta.description} />
245+ <meta property="twitter:image" content={data.meta.ogImage} />
246+
247+ <!-- Additional Meta Tags -->
248+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
249+ <meta name="theme-color" content="#2195f2" />
250+ <link rel="canonical" href={data.meta.url} />
251+ <link rel="alternate" hreflang="fr" href={data.meta.url} />
252+</svelte:head>
253+
225254 <div class="windows-xp-bg">
226255 {@render children()}
227256 </div>
@@ -222,6 +222,35 @@
222 });222 });
223 </script>223 </script>
224 224
225+<svelte:head>
226+ <title>{data.meta.title}</title>
227+ <meta name="description" content={data.meta.description} />
228+ <meta name="keywords" content={data.meta.keywords} />
229+ <meta name="language" content="French" />
230+ <html lang="fr" />
231+
232+ <!-- Open Graph / Facebook -->
233+ <meta property="og:locale" content={data.meta.locale} />
234+ <meta property="og:type" content={data.meta.type} />
235+ <meta property="og:url" content={data.meta.url} />
236+ <meta property="og:title" content={data.meta.title} />
237+ <meta property="og:description" content={data.meta.description} />
238+ <meta property="og:image" content={data.meta.ogImage} />
239+
240+ <!-- Twitter -->
241+ <meta property="twitter:card" content="summary_large_image" />
242+ <meta property="twitter:url" content={data.meta.url} />
243+ <meta property="twitter:title" content={data.meta.title} />
244+ <meta property="twitter:description" content={data.meta.description} />
245+ <meta property="twitter:image" content={data.meta.ogImage} />
246+
247+ <!-- Additional Meta Tags -->
248+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
249+ <meta name="theme-color" content="#2195f2" />
250+ <link rel="canonical" href={data.meta.url} />
251+ <link rel="alternate" hreflang="fr" href={data.meta.url} />
252+</svelte:head>
253+
225 <div class="windows-xp-bg">254 <div class="windows-xp-bg">
226 {@render children()}255 {@render children()}
227 </div>256 </div>
M src/routes/+layout.ts +10 -1
@@ -22,6 +22,15 @@ export const load: LayoutLoad = async ({ data, depends }) => {
2222 // Return the data from the server load function
2323 return {
2424 user: data.user,
25- session: data.session
25+ session: data.session,
26+ meta: {
27+ title: 'PDR AIM - Sandbox',
28+ description: 'Un projet sandbox non lucratif qui recrée l\'ambiance des salons de discussion de l\'époque AOL/AIM. Une expérience nostalgique dans un environnement Windows XP.',
29+ keywords: 'sandbox chat, AOL, AIM, salon de discussion, Windows XP, projet non lucratif, rétro',
30+ ogImage: '/og-image.jpg',
31+ type: 'website',
32+ url: 'https://pdraim.org',
33+ locale: 'fr_FR'
34+ }
2635 };
2736 }; ⏎̸
@@ -22,6 +22,15 @@ export const load: LayoutLoad = async ({ data, depends }) => {
22 // Return the data from the server load function22 // Return the data from the server load function
23 return {23 return {
24 user: data.user,24 user: data.user,
25- session: data.session25+ session: data.session,
26+ meta: {
27+ title: 'PDR AIM - Sandbox',
28+ description: 'Un projet sandbox non lucratif qui recrée l\'ambiance des salons de discussion de l\'époque AOL/AIM. Une expérience nostalgique dans un environnement Windows XP.',
29+ keywords: 'sandbox chat, AOL, AIM, salon de discussion, Windows XP, projet non lucratif, rétro',
30+ ogImage: '/og-image.jpg',
31+ type: 'website',
32+ url: 'https://pdraim.org',
33+ locale: 'fr_FR'
34+ }
26 };35 };
27 }; ⏎̸36 }; ⏎̸

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 8

↑↓ moveenter openesc close