Add Torob tags, Meshkee SEO routes, and updated static-image slots.
Product pages emit crawler-readable meta, public URLs use id plus Farsi slugs, and the homepage catalog matches the dashboard slot keys. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
f42c30a4b7
commit
c84147e765
+28
-16
@@ -1,5 +1,5 @@
|
||||
import { AboutUs } from "@/components/AboutUs";
|
||||
import { BannerGrid4, BannerRow3 } from "@/components/Banners";
|
||||
import { BannerGrid4, BannerRow } from "@/components/Banners";
|
||||
import { BlogCarousel } from "@/components/BlogCarousel";
|
||||
import { Brands } from "@/components/Brands";
|
||||
import { Categories } from "@/components/Categories";
|
||||
@@ -8,44 +8,56 @@ import { SpecialSale } from "@/components/SpecialSale";
|
||||
import { TopSelling } from "@/components/TopSelling";
|
||||
import {
|
||||
STATIC_IMAGE_KEYS,
|
||||
firstImageForSlot,
|
||||
getStaticImageSlots,
|
||||
imagesForSlot,
|
||||
slotByKey,
|
||||
} from "@/lib/static-images";
|
||||
import { SITE } from "@/lib/site";
|
||||
import type { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: `${SITE.nameFa} | ${SITE.tagline}`,
|
||||
description: SITE.aboutShort,
|
||||
alternates: { canonical: "/" },
|
||||
};
|
||||
|
||||
export default async function Home() {
|
||||
const slots = await getStaticImageSlots("home");
|
||||
const sliderSlot = slotByKey(slots, STATIC_IMAGE_KEYS.slider);
|
||||
const sideSlot = slotByKey(slots, STATIC_IMAGE_KEYS.bannersBelowSlider);
|
||||
const fourSlot = slotByKey(slots, STATIC_IMAGE_KEYS.fourBannerSection);
|
||||
const threeSlot = slotByKey(slots, STATIC_IMAGE_KEYS.threeBannerRow);
|
||||
const sideSlot = slotByKey(slots, STATIC_IMAGE_KEYS.twoBannerBelowSlider);
|
||||
const categorySlot = slotByKey(slots, STATIC_IMAGE_KEYS.categories);
|
||||
const fourSlot = slotByKey(slots, STATIC_IMAGE_KEYS.fourBanner);
|
||||
const twoRowSlot = slotByKey(slots, STATIC_IMAGE_KEYS.twoBannerRow);
|
||||
const brandsSlot = slotByKey(slots, STATIC_IMAGE_KEYS.brands);
|
||||
const aboutSlot = slotByKey(slots, STATIC_IMAGE_KEYS.aboutUsImage);
|
||||
|
||||
return (
|
||||
<>
|
||||
<h1 className="sr-only">
|
||||
{SITE.nameFa}؛ {SITE.tagline}
|
||||
</h1>
|
||||
<HeroSlider
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.slider)}
|
||||
aspectRatio={sliderSlot?.aspectRatio}
|
||||
sideImages={imagesForSlot(slots, STATIC_IMAGE_KEYS.bannersBelowSlider)}
|
||||
sideImages={imagesForSlot(slots, STATIC_IMAGE_KEYS.twoBannerBelowSlider)}
|
||||
sideAspectRatio={sideSlot?.aspectRatio}
|
||||
/>
|
||||
<SpecialSale />
|
||||
<Categories images={imagesForSlot(slots, STATIC_IMAGE_KEYS.categories)} />
|
||||
<Categories
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.categories)}
|
||||
aspectRatio={categorySlot?.aspectRatio}
|
||||
/>
|
||||
<BannerGrid4
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.fourBannerSection)}
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.fourBanner)}
|
||||
aspectRatio={fourSlot?.aspectRatio}
|
||||
/>
|
||||
<TopSelling />
|
||||
<BannerRow3
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.threeBannerRow)}
|
||||
aspectRatio={threeSlot?.aspectRatio}
|
||||
/>
|
||||
<Brands />
|
||||
<AboutUs
|
||||
image={firstImageForSlot(slots, STATIC_IMAGE_KEYS.aboutUsImage)}
|
||||
aspectRatio={aboutSlot?.aspectRatio}
|
||||
<BannerRow
|
||||
images={imagesForSlot(slots, STATIC_IMAGE_KEYS.twoBannerRow)}
|
||||
aspectRatio={twoRowSlot?.aspectRatio}
|
||||
/>
|
||||
<Brands images={imagesForSlot(slots, STATIC_IMAGE_KEYS.brands)} aspectRatio={brandsSlot?.aspectRatio} />
|
||||
<AboutUs images={imagesForSlot(slots, STATIC_IMAGE_KEYS.aboutUsImage)} aspectRatio={aboutSlot?.aspectRatio} />
|
||||
<BlogCarousel />
|
||||
</>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user