diff --git a/package-lock.json b/package-lock.json index 659d319..a18a815 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "lenis": "^1.1.18", "preline": "^2.6.0", "rimraf": "^6.0.1", + "schema-dts": "^1.1.2", "sharp": "^0.33.5", "sharp-ico": "^0.1.5", "tailwindcss": "^3.4.17" @@ -6170,6 +6171,15 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, + "node_modules/schema-dts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", + "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", + "license": "Apache-2.0", + "peerDependencies": { + "typescript": ">=4.1.0" + } + }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", diff --git a/package.json b/package.json index 2bbe72a..e0452cd 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "lenis": "^1.1.18", "preline": "^2.6.0", "rimraf": "^6.0.1", + "schema-dts": "^1.1.2", "sharp": "^0.33.5", "sharp-ico": "^0.1.5", "tailwindcss": "^3.4.17" diff --git a/src/components/GrandePhotoCentrale.astro b/src/components/GrandePhotoCentrale.astro new file mode 100644 index 0000000..104c5df --- /dev/null +++ b/src/components/GrandePhotoCentrale.astro @@ -0,0 +1,22 @@ +--- +import { Image } from "astro:assets"; +import type { ImageMetadata } from "astro"; + +const { src, alt } = Astro.props; + +interface Props { + src: ImageMetadata + alt: string; +} +--- + +
+ {alt} +
diff --git a/src/components/sections/features/FeaturesGeneral.astro b/src/components/sections/features/FeaturesGeneral.astro index 9bbe42a..a907e7e 100644 --- a/src/components/sections/features/FeaturesGeneral.astro +++ b/src/components/sections/features/FeaturesGeneral.astro @@ -3,6 +3,7 @@ import { Image } from "astro:assets"; import IconBlock from "@components/ui/blocks/IconBlock.astro"; import Icon from "@components/ui/icons/Icon.astro"; +import GrandePhotoCentrale from "../../GrandePhotoCentrale.astro"; interface Feature { heading: string; @@ -14,8 +15,8 @@ interface Props { title?: string; subTitle?: string; features?: Feature[]; - src?: any; - alt?: string; + src: any; + alt: string; } // Define props from Astro const { title, subTitle, src, alt, features } = Astro.props; @@ -25,20 +26,7 @@ const { title, subTitle, src, alt, features } = Astro.props; class="mx-auto max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 2xl:max-w-full" > -
- { - src && alt && ( - {alt} - ) - } -
+
diff --git a/src/components/sections/navbar&footer/Navbar.astro b/src/components/sections/navbar&footer/Navbar.astro index c5b591a..37934c3 100644 --- a/src/components/sections/navbar&footer/Navbar.astro +++ b/src/components/sections/navbar&footer/Navbar.astro @@ -1,10 +1,7 @@ --- -//Import relevant dependencies import ThemeIcon from "@components/ThemeIcon.astro"; import NavLink from "@components/ui/links/NavLink.astro"; -import Authentication from "../misc/Authentication.astro"; import strings from "@utils/navigation.ts"; -import LanguagePicker from "@components/ui/LanguagePicker.astro"; --- diff --git a/src/data_files/constants.ts b/src/data_files/constants.ts index 217011d..382b854 100644 --- a/src/data_files/constants.ts +++ b/src/data_files/constants.ts @@ -1,4 +1,5 @@ import ogImageSrc from "@images/vue-de-la-piscine.jpg"; +import type { WebPage, WebSite, WithContext } from "schema-dts"; export const SITE = { title: "Maison à vendre à Albi", @@ -9,24 +10,34 @@ export const SITE = { author: "Jalil Arfaoui", }; -export const SEO = { - title: SITE.title, +export const websiteStructuredDescription = { + "@type": "WebSite", + "url": "https://screwfast.uk", + "name": "ScrewFast", + "description": + "ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs.", +} satisfies WebSite + +const defaultStructuredData = { + "@context": "https://schema.org", + "@type": "WebPage", + inLanguage: "fr-FR", + "@id": SITE.url, + url: SITE.url, + name: SITE.title, description: SITE.description, - structuredData: { - "@context": "https://schema.org", - "@type": "WebPage", - inLanguage: "fr-FR", - "@id": SITE.url, + isPartOf: { + "@type": "WebSite", url: SITE.url, name: SITE.title, description: SITE.description, - isPartOf: { - "@type": "WebSite", - url: SITE.url, - name: SITE.title, - description: SITE.description, - }, }, +} satisfies WithContext + +export const SEO = { + title: SITE.title, + description: SITE.description, + structuredData: defaultStructuredData, }; export const OG = { diff --git a/src/images/vue-piscine.jpg b/src/images/vue-piscine.jpg new file mode 100644 index 0000000..a2eb3de Binary files /dev/null and b/src/images/vue-piscine.jpg differ diff --git a/src/layouts/MainLayout.astro b/src/layouts/MainLayout.astro index 58abd8c..8fb6bcc 100644 --- a/src/layouts/MainLayout.astro +++ b/src/layouts/MainLayout.astro @@ -4,6 +4,7 @@ import Meta from "@components/Meta.astro"; import Navbar from "@components/sections/navbar&footer/Navbar.astro"; import FooterSection from "@components/sections/navbar&footer/FooterSection.astro"; import { SITE } from "@data/constants"; +import type { Thing, WithContext } from "schema-dts"; // Setting expected props const { title = SITE.title, meta, structuredData, lang = "en" } = Astro.props; @@ -12,7 +13,7 @@ const { title = SITE.title, meta, structuredData, lang = "en" } = Astro.props; interface Props { title?: string; meta?: string; - structuredData?: object; + structuredData?: WithContext; lang?: string; } --- diff --git a/src/pages/avec-piscine.astro b/src/pages/avec-piscine.astro new file mode 100644 index 0000000..af8a598 --- /dev/null +++ b/src/pages/avec-piscine.astro @@ -0,0 +1,36 @@ +--- +import { websiteStructuredDescription } from "../data_files/constants"; +import MainLayout from "@/layouts/MainLayout.astro"; +import type { WebPage, WithContext } from "schema-dts"; +import MainSection from "../components/ui/blocks/MainSection.astro"; +import GrandePhotoCentrale from "../components/GrandePhotoCentrale.astro"; + + +const structuredDescription = { + "@context": "https://schema.org", + "@type": "WebPage", + "@id": "https://achat-maison-albi.fr/avec-piscine", + "url": "https://achat-maison-albi.fr/avec-piscine", + "name": "Maison individuelle avec piscine à Albi", + "description": + "Piscine de 4m x 8m, soit 50m3, à l’abri des regards et fraiche toute l’année", + "isPartOf": websiteStructuredDescription, + "inLanguage": "fr-FR" +} satisfies WithContext + +import photoDeLaPiscine from "@images/vue-piscine.jpg" +--- + + + + + diff --git a/src/pages/contact.astro b/src/pages/contact.astro index e9d6bd2..7344750 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -25,7 +25,7 @@ const pageTitle: string = `Contact | ${SITE.title}`; "description": "ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs.", }, - "inLanguage": "en-US" + "inLanguage": "fr-FR" }} > diff --git a/src/pages/index.astro b/src/pages/index.astro index 83d76b3..6d691bc 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,5 +1,4 @@ --- -// Import the necessary components import MainLayout from "@/layouts/MainLayout.astro"; import HeroSection from "@components/sections/landing/HeroSection.astro"; import HeroSectionAlt from "@components/sections/landing/HeroSectionAlt.astro"; diff --git a/src/pages/pieces.astro b/src/pages/pieces.astro index 74c6f85..23cb10c 100644 --- a/src/pages/pieces.astro +++ b/src/pages/pieces.astro @@ -114,7 +114,7 @@ const pageTitle: string = `Pièces | ${SITE.title}`; "name": "ScrewFast", "description": "ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs." }, - "inLanguage": "en-US" + "inLanguage": "fr-FR" }} > diff --git a/src/pages/products/index.astro b/src/pages/products/index.astro index 074373b..6a10874 100644 --- a/src/pages/products/index.astro +++ b/src/pages/products/index.astro @@ -79,7 +79,7 @@ const pageTitle: string = `Products | ${SITE.title}`; "name": "ScrewFast", "description": "ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs." }, - "inLanguage": "en-US" + "inLanguage": "fr-FR" }} >