Align brand search SEO with Grace Salmoun

هذا الالتزام موجود في:
2026-05-03 16:48:06 +03:00
الأصل bd1bb5c2a8
التزام e6f1c6670b
15 ملفات معدلة مع 101 إضافات و48 حذوفات

عرض الملف

@@ -2,7 +2,15 @@ import type { Metadata } from "next";
import { englishPortfolioContent, getPortfolioContent, sharedProfile, type Language } from "@/data/portfolio";
import { absoluteUrl, siteName } from "@/data/site-config";
const primaryEnglishName = sharedProfile.founderNameEn;
const fullEnglishName = sharedProfile.fullNameEn;
const englishAlternateNames = sharedProfile.alternateNamesEn;
const arabicName = sharedProfile.founderNameAr;
const sharedKeywords = [
"Grace Salmoun",
"Grace Butrus Salmoun",
"Grace Salamoun",
"architecture portfolio",
"architectural engineer",
"architectural design",
@@ -26,13 +34,21 @@ function getAlternateLocales(language: Language) {
return language === "ar" ? ["en_US"] : ["ar_SY"];
}
function getHomePath(language: Language) {
return language === "ar" ? "/ar" : "/";
}
function getResumePath(language: Language) {
return language === "ar" ? "/ar/resume" : "/resume";
}
function getOgImage(language: Language) {
return {
url: absoluteUrl(sharedProfile.heroImage),
alt:
language === "ar"
? "معاينة بورتفوليو غريس بطرس سلمون"
: "Portfolio preview for Grace Butrus Salmoun",
: "Portfolio preview for Grace Salmoun",
};
}
@@ -55,16 +71,16 @@ function buildMetadata({
title,
description,
keywords: [...sharedKeywords, ...localizedKeywords[language]],
authors: [{ name: sharedProfile.founderNameEn }],
creator: sharedProfile.founderNameEn,
publisher: sharedProfile.founderNameEn,
authors: [{ name: primaryEnglishName }],
creator: primaryEnglishName,
publisher: primaryEnglishName,
category: "architecture portfolio",
alternates: {
canonical: canonicalPath,
languages: {
en: canonicalPath.includes("/resume") ? "/en/resume" : "/en",
en: canonicalPath.includes("/resume") ? "/resume" : "/",
ar: canonicalPath.includes("/resume") ? "/ar/resume" : "/ar",
"x-default": "/en",
"x-default": "/",
},
},
robots: {
@@ -106,9 +122,9 @@ export function getDefaultSeoMetadata(): Metadata {
title,
description,
applicationName: siteName,
authors: [{ name: sharedProfile.founderNameEn }],
creator: sharedProfile.founderNameEn,
publisher: sharedProfile.founderNameEn,
authors: [{ name: primaryEnglishName }],
creator: primaryEnglishName,
publisher: primaryEnglishName,
keywords: [...sharedKeywords, ...localizedKeywords.en],
category: "architecture portfolio",
referrer: "origin-when-cross-origin",
@@ -126,7 +142,7 @@ export function getDefaultSeoMetadata(): Metadata {
openGraph: {
title,
description,
url: absoluteUrl("/en"),
url: absoluteUrl("/"),
siteName,
locale: "en_US",
alternateLocale: ["ar_SY"],
@@ -149,7 +165,7 @@ export function getHomeMetadata(language: Language): Metadata {
language,
title: t.meta.title,
description: t.meta.description,
canonicalPath: `/${language}`,
canonicalPath: getHomePath(language),
pageType: "website",
});
}
@@ -162,7 +178,7 @@ export function getResumeMetadata(language: Language): Metadata {
language,
title,
description: t.resume.description,
canonicalPath: `/${language}/resume`,
canonicalPath: getResumePath(language),
pageType: "profile",
});
}
@@ -177,6 +193,7 @@ export function getHomeStructuredData(language: Language) {
"@context": "https://schema.org",
"@type": "WebSite",
name: siteName,
alternateName: [`${fullEnglishName} Portfolio`, "Grace Salamoun Portfolio"],
url: absoluteUrl("/"),
inLanguage: ["en", "ar"],
},
@@ -184,7 +201,11 @@ export function getHomeStructuredData(language: Language) {
"@context": "https://schema.org",
"@type": "Person",
name,
url: absoluteUrl(`/${language}`),
givenName: "Grace",
additionalName: "Butrus",
familyName: "Salmoun",
alternateName: language === "ar" ? [primaryEnglishName, fullEnglishName, ...englishAlternateNames] : [fullEnglishName, arabicName, ...englishAlternateNames],
url: absoluteUrl(getHomePath(language)),
image: absoluteUrl(sharedProfile.heroImage),
jobTitle: t.ui.architectureEngineer,
description: t.meta.description,
@@ -203,7 +224,7 @@ export function getHomeStructuredData(language: Language) {
"@type": "CollectionPage",
name: t.meta.title,
description: t.meta.description,
url: absoluteUrl(`/${language}`),
url: absoluteUrl(getHomePath(language)),
inLanguage: language,
isPartOf: {
"@type": "WebSite",
@@ -228,7 +249,11 @@ export function getResumeStructuredData(language: Language) {
"@context": "https://schema.org",
"@type": "Person",
name,
url: absoluteUrl(`/${language}`),
givenName: "Grace",
additionalName: "Butrus",
familyName: "Salmoun",
alternateName: language === "ar" ? [primaryEnglishName, fullEnglishName, ...englishAlternateNames] : [fullEnglishName, arabicName, ...englishAlternateNames],
url: absoluteUrl(getHomePath(language)),
email: sharedProfile.email,
telephone: sharedProfile.phone,
image: absoluteUrl(sharedProfile.heroImage),
@@ -240,7 +265,7 @@ export function getResumeStructuredData(language: Language) {
"@type": "ProfilePage",
name: title,
description: t.resume.description,
url: absoluteUrl(`/${language}/resume`),
url: absoluteUrl(getResumePath(language)),
inLanguage: language,
isPartOf: {
"@type": "WebSite",