Improve SEO metadata and structured data

هذا الالتزام موجود في:
2026-05-03 15:54:35 +03:00
الأصل 811b3ca794
التزام bd1bb5c2a8
10 ملفات معدلة مع 300 إضافات و55 حذوفات

عرض الملف

@@ -1,7 +1,8 @@
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { HomePage } from "@/components/home-page";
import { getPortfolioContent, isLanguage, languages, type Language } from "@/data/portfolio";
import { isLanguage, languages, type Language } from "@/data/portfolio";
import { getHomeMetadata } from "@/data/seo";
export function generateStaticParams() {
return languages.map((lang) => ({ lang }));
@@ -12,20 +13,7 @@ export function generateMetadata({ params }: { params: { lang: string } }): Meta
return {};
}
const language = params.lang as Language;
const t = getPortfolioContent(language);
return {
title: t.meta.title,
description: t.meta.description,
alternates: {
canonical: `/${language}`,
languages: {
en: "/en",
ar: "/ar",
},
},
};
return getHomeMetadata(params.lang as Language);
}
export default function LocalizedHomePage({ params }: { params: { lang: string } }) {

عرض الملف

@@ -1,7 +1,8 @@
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { ResumePageContent } from "@/components/resume-page-content";
import { getPortfolioContent, isLanguage, languages, type Language } from "@/data/portfolio";
import { isLanguage, languages, type Language } from "@/data/portfolio";
import { getResumeMetadata } from "@/data/seo";
export function generateStaticParams() {
return languages.map((lang) => ({ lang }));
@@ -12,20 +13,7 @@ export function generateMetadata({ params }: { params: { lang: string } }): Meta
return {};
}
const language = params.lang as Language;
const t = getPortfolioContent(language);
return {
title: language === "ar" ? `السيرة الذاتية | ${t.meta.title}` : `Resume | ${t.meta.title}`,
description: t.resume.description,
alternates: {
canonical: `/${language}/resume`,
languages: {
en: "/en/resume",
ar: "/ar/resume",
},
},
};
return getResumeMetadata(params.lang as Language);
}
export default function LocalizedResumePage({ params }: { params: { lang: string } }) {

عرض الملف

@@ -1,6 +1,8 @@
import type { Metadata } from "next";
import "./globals.css";
import "./portfolio.css";
import { getDefaultSeoMetadata } from "@/data/seo";
import { siteUrl } from "@/data/site-config";
const themeInitScript = `
(() => {
@@ -18,22 +20,8 @@ const themeInitScript = `
`;
export const metadata: Metadata = {
title: "Grace Butrus Salmoun | Architectural Engineer Specialized in Architectural Design",
description:
"A bilingual architecture portfolio for Grace Butrus Salmoun, an architectural engineer specialized in architectural design, working across urban rehabilitation, landscape, shop drawings, and visual presentation.",
metadataBase: new URL("https://grace-salamoun-architect.vercel.app"),
openGraph: {
title: "Grace Butrus Salmoun | Architectural Engineer Specialized in Architectural Design",
description:
"Architectural design, urban rehabilitation, landscape, shop drawings, and visual presentation in English and Arabic.",
type: "website",
},
twitter: {
card: "summary_large_image",
title: "Grace Butrus Salmoun | Architectural Engineer Specialized in Architectural Design",
description:
"A bilingual architecture portfolio featuring selected works, technical documentation, and visual presentation.",
},
metadataBase: new URL(siteUrl),
...getDefaultSeoMetadata(),
};
export default function RootLayout({

عرض الملف

@@ -1,4 +1,5 @@
import type { MetadataRoute } from "next";
import type { MetadataRoute } from "next";
import { absoluteUrl, siteUrl } from "@/data/site-config";
export default function robots(): MetadataRoute.Robots {
return {
@@ -6,6 +7,7 @@ export default function robots(): MetadataRoute.Robots {
userAgent: "*",
allow: "/",
},
sitemap: "https://grace-salamoun-architect.vercel.app/sitemap.xml",
host: siteUrl,
sitemap: absoluteUrl("/sitemap.xml"),
};
}

عرض الملف

@@ -1,30 +1,30 @@
import type { MetadataRoute } from "next";
import type { MetadataRoute } from "next";
import { absoluteUrl } from "@/data/site-config";
export default function sitemap(): MetadataRoute.Sitemap {
const baseUrl = "https://grace-salamoun-architect.vercel.app";
const lastModified = new Date("2026-04-18T00:00:00.000Z");
const lastModified = new Date();
return [
{
url: `${baseUrl}/en`,
url: absoluteUrl("/en"),
lastModified,
changeFrequency: "monthly",
priority: 1,
},
{
url: `${baseUrl}/ar`,
url: absoluteUrl("/ar"),
lastModified,
changeFrequency: "monthly",
priority: 1,
},
{
url: `${baseUrl}/en/resume`,
url: absoluteUrl("/en/resume"),
lastModified,
changeFrequency: "monthly",
priority: 0.8,
},
{
url: `${baseUrl}/ar/resume`,
url: absoluteUrl("/ar/resume"),
lastModified,
changeFrequency: "monthly",
priority: 0.8,