Migrate to sveltekit #26
5 changed files with 93 additions and 2 deletions
61
src/lib/components/Seo.svelte
Normal file
61
src/lib/components/Seo.svelte
Normal file
|
@ -0,0 +1,61 @@
|
|||
<script>
|
||||
import { t } from '$lib/translations';
|
||||
|
||||
/** @type {string} Title of the page */
|
||||
export let title;
|
||||
|
||||
/** @type {string} Description of the page */
|
||||
export let description;
|
||||
|
||||
/** @type {string} SEO keywords */
|
||||
export let keywords;
|
||||
|
||||
/** @type {string} Canonical URL of the page */
|
||||
export let url;
|
||||
|
||||
/** @type {string} Main image URL for sharing */
|
||||
export let image;
|
||||
|
||||
/** @type {string} Open Graph type (e.g., 'website', 'article') */
|
||||
export let ogType = 'website';
|
||||
|
||||
/** @type {string} Open Graph title (defaults to title) */
|
||||
export let ogTitle = title;
|
||||
|
||||
/** @type {string} Open Graph description (defaults to description) */
|
||||
export let ogDescription = description;
|
||||
|
||||
/** @type {string} Open Graph image (defaults to image) */
|
||||
export let ogImage = image;
|
||||
|
||||
/** @type {string} Twitter card type (e.g., 'summary_large_image') */
|
||||
export let twitterCard = 'summary_large_image';
|
||||
|
||||
/** @type {string} Twitter title (defaults to title) */
|
||||
export let twitterTitle = title;
|
||||
|
||||
/** @type {string} Twitter description (defaults to description) */
|
||||
export let twitterDescription = description;
|
||||
|
||||
/** @type {string} Twitter image (defaults to image) */
|
||||
export let twitterImage = image;
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{$t(title)}</title>
|
||||
<meta name="description" content={$t(description)} />
|
||||
<meta name="keywords" content={$t(keywords)} />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content={ogType} />
|
||||
<meta property="og:title" content={$t(ogTitle)} />
|
||||
<meta property="og:description" content={$t(ogDescription)} />
|
||||
<meta property="og:image" content={ogImage} />
|
||||
<meta property="og:url" content={url} />
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content={twitterCard} />
|
||||
<meta name="twitter:title" content={twitterTitle} />
|
||||
<meta name="twitter:description" content={$t(twitterDescription)} />
|
||||
<meta name="twitter:image" content={twitterImage} />
|
||||
</svelte:head>
|
|
@ -13,5 +13,10 @@
|
|||
"donation.cta.description": "every little bit helps!",
|
||||
"cta.title": "🚀 Try It Now",
|
||||
"cta.cta": "🧵 Open Viewer",
|
||||
"cta.cta.description": "the fastest <strong>Free Online Embroidery File Viewer</strong>."
|
||||
"cta.cta.description": "the fastest <strong>Free Online Embroidery File Viewer</strong>.",
|
||||
"seo.title": "🧵 Free Online Embroidery File Viewer - Fast, Private & No Signup",
|
||||
"seo.description": "Upload and preview embroidery files instantly with Embroidery Viewer. Supports DST, PES, JEF, EXP, VP3 and more. No installs, no uploads – 100% browser-based and free.",
|
||||
"seo.keywords": "embroidery viewer, online embroidery viewer, embroidery file preview, DST viewer, PES viewer, free embroidery tool, JEF viewer, EXP embroidery, VP3 embroidery viewer, embroidery preview tool, browser embroidery renderer, convert embroidery to PNG",
|
||||
"seo.url": "https://embroideryviewer.xyz",
|
||||
"seo.image": "https://embroideryviewer.xyz/og/"
|
||||
}
|
||||
|
|
|
@ -13,5 +13,10 @@
|
|||
"donation.cta.description": "cada pequena ajuda é bem-vinda!",
|
||||
"cta.title": "🚀 Experimente agora",
|
||||
"cta.cta": "🧵 Abrir visualizador",
|
||||
"cta.cta.description": "o <strong>visualizador de arquivos de bordado online gratuito</strong> mais rápido."
|
||||
"cta.cta.description": "o <strong>visualizador de arquivos de bordado online gratuito</strong> mais rápido.",
|
||||
"seo.title": "🧵 Visualizador de Bordado Online Grátis - Rápido, Privado e Sem Cadastro",
|
||||
"seo.description": "Envie e visualize arquivos de bordado instantaneamente com o Embroidery Viewer. Compatível com DST, PES, JEF, EXP, VP3 e mais. Sem instalações, sem uploads – 100% no navegador e gratuito.",
|
||||
"seo.keywords": "visualizador de bordado, visualizador online de bordado, visualizar arquivos de bordado, visualizar DST, visualizar PES, ferramenta gratuita de bordado, visualizador JEF, bordado EXP, visualizador VP3, pré-visualização de bordado, renderizador de bordado no navegador, converter bordado em PNG",
|
||||
"seo.url": "https://embroideryviewer.xyz",
|
||||
"seo.image": "https://embroideryviewer.xyz/og/"
|
||||
}
|
||||
|
|
12
src/routes/+page.js
Normal file
12
src/routes/+page.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
export function load() {
|
||||
return {
|
||||
metadata: {
|
||||
title: 'home.seo.title',
|
||||
description: 'home.seo.description',
|
||||
keywords: 'home.seo.keywords',
|
||||
url: 'https://embroideryviewer.xyz/about',
|
||||
image: 'https://embroideryviewer.xyz/og/about.jpg',
|
||||
},
|
||||
};
|
||||
}
|
|
@ -1,7 +1,15 @@
|
|||
<script>
|
||||
import Seo from '$lib/components/Seo.svelte';
|
||||
import { t } from '$lib/translations';
|
||||
|
||||
/** @type {import('./$types').PageProps} */
|
||||
let { data } = $props();
|
||||
|
||||
const metadata = data.metadata;
|
||||
</script>
|
||||
|
||||
<Seo {...metadata} />
|
||||
|
||||
<div class="home-container">
|
||||
<section aria-labelledby="main-title">
|
||||
<h1 id="main-title">{$t('home.main.title')}</h1>
|
||||
|
|
Loading…
Add table
Reference in a new issue