--- import "../styles/global.css"; import type { ImageMetadata } from 'astro'; import { getImage } from 'astro:assets'; import SEO from '../components/SEO.astro'; import SchemaOrg from '../components/SchemaOrg.astro'; import type { FaqItem } from '../data/faq'; import { business } from '../data/business'; import defaultOgImage from '../assets/images/3d-scroll/img5.jpg'; export interface Props { /** Unik svensk titel för sidan. */ title: string; /** Unik svensk meta description, ca 120–160 tecken. */ description: string; /** Kanonisk sökväg, t.ex. "/portfolio". Utelämnas = härleds från URL:en. */ path?: string; image?: ImageMetadata; imageAlt?: string; pageType?: 'WebPage' | 'AboutPage' | 'ContactPage' | 'CollectionPage'; /** Namn i brödsmulan (BreadcrumbList) för undersidor. */ breadcrumb?: string; faq?: FaqItem[]; noindex?: boolean; } const { title, description, path, image = defaultOgImage, imageAlt = 'Svartvit bild av en man som bär ett litet barn bland såpbubblor i motljus', pageType, breadcrumb, faq, noindex = false, } = Astro.props; // og:image: ny JPG via Astros bildtjänst (EXIF/GPS rensas bort), absolut URL. const site = Astro.site ?? new URL(business.url); const og = await getImage({ src: image, width: 1200, format: 'jpg', quality: 82 }); const ogImageUrl = new URL(og.src, site).toString(); const ogWidth = Number(og.attributes.width) || undefined; const ogHeight = Number(og.attributes.height) || undefined; const nav = [ { href: '/portfolio', label: 'Portfolio' }, { href: '/posters', label: 'Posters' }, { href: '/about', label: 'Om mig' }, { href: '/contact', label: 'Kontakt' }, ]; --- {!noindex && ( )}

{business.brand} – {business.person.jobTitle.toLowerCase()} {business.person.name}, {business.country.name} · {business.email} · Instagram

© {new Date().getFullYear()} {business.brand}. Alla rättigheter förbehållna. · Integritetspolicy ·