SEO and language tests

This commit is contained in:
Henrik Larsson 2023-05-05 14:11:25 +02:00
parent 7dc550291e
commit 182e245fd7
6 changed files with 62 additions and 186 deletions

View File

@ -1,14 +1,16 @@
// 'use client';
import getQueryFromSlug from 'helpers/getQueryFromSlug'; import getQueryFromSlug from 'helpers/getQueryFromSlug';
import { docQuery } from 'lib/sanity/queries'; import { docQuery } from 'lib/sanity/queries';
import { client } from 'lib/sanity/sanity.client'; import { client } from 'lib/sanity/sanity.client';
import type { Metadata } from 'next';
import { groq } from 'next-sanity'; import { groq } from 'next-sanity';
import CategoryPage from './category-page'; import CategoryPage from './category-page';
import HomePage from './home-page'; import HomePage from './home-page';
import ProductPage from './product-page'; import ProductPage from './product-page';
import SinglePage from './single-page'; import SinglePage from './single-page';
/**
* Get paths for each page.
*/
export async function generateStaticParams() { export async function generateStaticParams() {
const paths = await client.fetch(groq`${docQuery}`, { const paths = await client.fetch(groq`${docQuery}`, {
next: { revalidate: 10 }, next: { revalidate: 10 },
@ -43,6 +45,45 @@ function filterDataToSingleItem(data: any, preview = false) {
return data[0] return data[0]
} }
/**
* Generate metadata for each page.
*/
export async function generateMetadata({ params }: {params: { slug: string[], locale: string }}): Promise<Metadata> {
const { slug, locale } = params
const { query = '', queryParams } = getQueryFromSlug(slug, locale)
const pageData = await client.fetch(query, queryParams)
const data = filterDataToSingleItem(pageData, false)
const { seo, title } = data
return {
title: seo?.title ? seo?.title : title,
description: seo?.description
? seo.description
: 'Webb och digitalbyrå från Göteborg',
openGraph: {
images: [
{
url: seo?.image?.asset?.url
? seo.image.asset.url
: '/og-image.jpg',
width: 1200,
height: 630,
alt: seo?.coverImage?.alt
? seo.coverImage.alt
: 'Kodamera AB',
},
],
},
}
}
/**
* Render pages depending on type.
*/
export default async function Page({ export default async function Page({
params, params,
}: { }: {

View File

@ -6,13 +6,29 @@ import { notFound } from 'next/navigation';
import { ReactNode } from 'react'; import { ReactNode } from 'react';
import './globals.css'; import './globals.css';
const { TWITTER_CREATOR, TWITTER_SITE, SITE_NAME } = process.env; const SITE_NAME = "KM Storefront"
const SITE_DESCRIPTION = "Webb och digitalbyrå från Göteborg"
const TWITTER_CREATOR = "@kodamera.se"
const TWITTER_SITE = "https://kodamera.se"
const OG_IMAGE_URL = "/og-image.jpg"
const OG_IMAGE_ALT = "Kodamera"
export const metadata = { export const metadata = {
title: { title: {
default: SITE_NAME, default: SITE_NAME,
template: `%s | ${SITE_NAME}` template: `%s | ${SITE_NAME}`
}, },
description: SITE_DESCRIPTION,
openGraph: {
images: [
{
url: OG_IMAGE_URL,
width: 1200,
height: 630,
alt: OG_IMAGE_ALT
},
],
},
robots: { robots: {
follow: true, follow: true,
index: true index: true
@ -34,7 +50,7 @@ const inter = Inter({
}); });
export function generateStaticParams() { export function generateStaticParams() {
return [{locale: 'sv'}, {locale: 'en'}, {locale: 'nn'}]; return [{locale: 'sv'}, {locale: 'en'}];
} }
interface LocaleLayoutProps { interface LocaleLayoutProps {
@ -46,6 +62,7 @@ interface LocaleLayoutProps {
export default async function LocaleLayout({children, params: {locale}}: LocaleLayoutProps) { export default async function LocaleLayout({children, params: {locale}}: LocaleLayoutProps) {
let messages; let messages;
try { try {
messages = (await import(`../../messages/${locale}.json`)).default; messages = (await import(`../../messages/${locale}.json`)).default;
} catch (error) { } catch (error) {

View File

@ -1,7 +1,4 @@
{ {
"Index": {
"title": "Welcome"
},
"ui": { "ui": {
"button": { "button": {
"close": "Close", "close": "Close",

View File

@ -1,176 +0,0 @@
{
"Index": {
"title": "Velkommen"
},
"ui": {
"button": {
"close": "Lukk",
"back": "Tilbake",
"wishList": "Legg til i favorittlisten"
},
"previewBanner": {
"titlePart": "Forhåndsvisning av:",
"exitPreviewLabel": "Avslutt forhåndsvisning"
},
"copyright": "Alle rettigheter forbeholdt."
},
"search": {
"search": "Søk",
"placeholder": "Søk etter produkter...",
"globalPlaceholder": "Søk produkter og kategorier...",
"categories": "Kategorier",
"priceRange": "Prisklasse",
"clearAllFilters": "Fjern alle filtre",
"submitTitle": "Send inn søket ditt",
"clearTitle": "Fjern søket ditt",
"resetTitle": "Tilbakestill søket ditt",
"seo": {
"title": "Søk",
"description": "Søk etter produkt eller kategori"
}
},
"product": {
"description": "Beskrivelse",
"specification": "Spesifikasjon",
"shippingAndReturns": "Frakt og retur",
"reviews": "anmeldelser",
"noReviews": "Ingen recensioner",
"addToCart": "Legg i handlekurv",
"notAvailable": "Ikke tilgjengelig",
"related": "Relaterte produkter",
"selectSize": "Velg størrelse"
},
"cart": {
"myCarttitle": "Handlekurven min",
"subTotal": "Delsum",
"taxes": "Skatter",
"calculatedAtCheckout": "Beregned i kassen",
"free": "Gratis",
"shipping": "Shipping",
"estimatedShipping": "Estimert shipping",
"total": "Totalt",
"proceedToCheckout": "Fortsett til utsjekking",
"empty": {
"title": "Handlekurven din er tom",
"text": "Legg til et produkt for å begynne å handle."
},
"error": "Vi kunne ikke fullføre kjøpet ditt. Sjekk kortinformasjonen din og prøv igjen.",
"success": "Takk for din bestilling.",
"addShippingAddress": "+ Legg til leveringsadresse",
"addShippingMethod": "+ Legg til leveringsmetode",
"addPaymentMethod": "+ Legg til betalingsmåte",
"continueShopping": "Fortsette å handle",
"seo": {
"title": "Min handlekurv",
"description": "Alle produktene i handlekurven din vises her"
}
},
"checkout": {
"checkoutTitle": "Kasse",
"subTotal": "Delsum",
"taxes": "Skatter",
"calculatedAtCheckout": "Beregned i kassen",
"free": "Gratis",
"shipping": "Shipping",
"total": "Totalt",
"confirmPurchase": "Bekreft kjøp"
},
"paymentMethod": {
"paymentMethodTitle": "Betalingsmåte",
"cardHolderName": "Kortholder",
"cardNumber": "Kortnummer",
"expires": "Utløpsdato",
"cvc": "CVC",
"firstName": "Fornavn",
"lastName": "Etternavn",
"company": "Firma (valgfritt)",
"streetAndHouseNumber": "Gate og husnummer",
"apartment": "Leilighet, suite osv. (valgfritt)",
"postalCode": "Post kode",
"city": "By",
"countryAndRegion": "Land/Region",
"continue": "Fortsette"
},
"shipping": {
"shippingTitle": "Shipping",
"shippingAdress": {
"same": "Samme som betalingsadresse",
"different": "Bruk en annen leveringsadresse"
},
"addShippingAddress": "Legg til leveringsadresse",
"firstName": "Fornavn",
"lastName": "Etternavn",
"company": "Firma (valgfritt)",
"streetAndHouseNumber": "Gate og husnummer",
"apartment": "Leilighet, suite osv. (valgfritt)",
"postalCode": "Post kode",
"city": "By",
"countryAndRegion": "Land/Region",
"continue": "Fortsette"
},
"orders": {
"title": "Mine bestillinger",
"notFound": "Ingen bestillinger funnet",
"seo": {
"title": "Mine bestillinger",
"description": "Mine bestillinger vises her"
}
},
"profile": {
"title": "Min profil",
"fullName": "Navn",
"email": "E-post",
"seo": {
"title": "Min profil",
"description": "Se og konfigurer kontoen min"
}
},
"wishlist": {
"title": "Min ønskeliste",
"empty": "Din ønskeliste er tom",
"seo": {
"title": "Min ønskeliste",
"description": "Ønskelisten min vises her"
}
},
"auth": {
"signUp": {
"firstName": "Fornavn",
"lastName": "Etternavn",
"email": "E-post",
"password": "Passord",
"informationPre": "Info",
"information": "Passord må være lengre enn 7 bokstaver og inneholde tall.",
"register": "Registrere",
"existingAccount": "Har du en konto?",
"loginLabel": "Logg inn"
},
"login": {
"email": "E-post",
"password": "Passord",
"logIn": "Logg inn",
"noExistingAccount": "Har du ikke en konto?",
"noExistingAccountLabel": "Registrere",
"forgotPasswordText": "E-post og passord er obligatorisk for å logge inn, har du",
"forgotPasswordLinkLabel": "glemt passordet?"
},
"forgotPassword": {
"email": "E-post",
"recover": "Tilbakestille passord",
"existingAccount": "Har du en konto?",
"loginLabel": "Logg inn"
}
},
"customerMenu": {
"myOrders": "Mine bestillinger",
"myProfile": "Min profil",
"myCart": "Min handlekurv",
"logOut": "Logg ut"
},
"notFound": {
"seo": {
"title": "Siden kan ikke bli funnet",
"description": "Siden kan ikke bli funnet"
}
}
}

View File

@ -1,7 +1,4 @@
{ {
"Index": {
"title": "Välkommen"
},
"ui": { "ui": {
"button": { "button": {
"close": "Stäng", "close": "Stäng",

BIN
public/og-image.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB