Skip to content

Improve SEO #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/routes/(app)/(card-layout)/code-snippets/[id]/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { superForm } from 'sveltekit-superforms/client';

import IconPenToSquare from '~icons/fa6-solid/pen-to-square';
import IconTrash from '~icons/fa6-solid/trash';
import { page } from '$app/stores';
import { Alert, Card } from '$lib/client/components/common';
import { config } from '$lib/client/core/config';
import {
Expand All @@ -14,6 +15,18 @@ import { formatUtcDateTime } from '$lib/shared/core/utils';

export let data;

const pageJsonLdData = {
'@context': 'http://schema.org',
'@type': 'SoftwareSourceCode',
identifier: data.codeSnippet.id,
name: data.codeSnippet.name,
text: data.codeSnippet.code,
url: $page.url.href,
};
const tagName = 'script';
const pageJsonLdScriptHtml = `<${tagName} type="application/ld+json">${JSON.stringify(
pageJsonLdData,
)}</${tagName}>`;
const toastStore = getToastStore();
const { message, enhance } = superForm(data.form, {
onUpdated({ form }) {
Expand All @@ -36,6 +49,8 @@ const lastModificationDate = formatUtcDateTime(updated_at);
name="description"
content="Code snippet - {data.codeSnippet.name} | {data.codeSnippet.code}"
/>
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
{@html pageJsonLdScriptHtml}
</svelte:head>

<Card
Expand Down
47 changes: 43 additions & 4 deletions src/routes/(app)/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { superForm } from 'sveltekit-superforms/client';

import IconPlus from '~icons/fa6-solid/plus';
import { goto, invalidateAll } from '$app/navigation';
import { page } from '$app/stores';
import { CodeSnippetCard } from '$lib/client/components/code-snippets';
import CodeSnippetFindForm from '$lib/client/components/code-snippets/CodeSnippetFindForm.svelte';
import { Alert, Card } from '$lib/client/components/common';
Expand All @@ -17,6 +18,41 @@ import type { FindCodeSnippetsQuery } from '$lib/shared/code-snippets/dtos';

export let data;

const pageMetaDescription =
'Explore a simple Pastebin-like CRUD app: A rich, open-source ' +
'example of a full-stack SvelteKit application designed for ' +
'developers. Features comprehensive tooling for real-world software ' +
'development, including CI/CD, testing, and more.';
const pageMetaKeywords = [
'code snippets',
'Pastebin',
'SvelteKit',
'full-stack development',
'CRUD app',
'open source',
'software development tools',
'CI/CD',
'testing',
].join(', ');
const pageRepositoryUrl = 'https://github.com/nodeexx/code-snippet-sharing';
const pageJsonLdData = {
'@context': 'http://schema.org',
'@type': 'WebApplication',
name: config.appName,
description: pageMetaDescription,
license: 'https://opensource.org/licenses/MIT',
url: $page.url.href,
sourceCode: 'https://github.com/nodeexx/code-snippet-sharing',
author: {
'@type': 'Person',
name: 'Nodeexx',
url: 'https://github.com/nodeexx',
},
};
const tagName = 'script';
const pageJsonLdScriptHtml = `<${tagName} type="application/ld+json">${JSON.stringify(
pageJsonLdData,
)}</${tagName}>`;
const toastStore = getToastStore();
const codeSnippetDeletionSuperForm = superForm(data.deleteForm, {
onUpdated({ form }) {
Expand Down Expand Up @@ -60,10 +96,13 @@ async function reloadData() {

<svelte:head>
<title>Home{config.pageTitleSuffix}</title>
<meta
name="description"
content="Simple Pastebin-like CRUD app that, open-source example of a full-stack SvelteKit app"
/>
<meta name="description" content="{pageMetaDescription}" />
<meta name="keywords" content="{pageMetaKeywords}" />
<meta name="author" content="Nodeexx" />
<link rel="canonical" href="${$page.url.href}" />
<link rel="me" href="{pageRepositoryUrl}" title="GitHub Repository" />
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
{@html pageJsonLdScriptHtml}
</svelte:head>

<div class="flex h-full flex-col items-center justify-center gap-5">
Expand Down
Loading