Improve SEO metadata and structured data
هذا الالتزام موجود في:
@@ -1,5 +1,6 @@
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { JsonLd } from "@/components/json-ld";
|
||||
import { ProjectCard } from "@/components/project-card";
|
||||
import { SectionHeading } from "@/components/section-heading";
|
||||
import { SiteShell } from "@/components/site-shell";
|
||||
@@ -11,12 +12,14 @@ import {
|
||||
sharedProfile,
|
||||
type Language,
|
||||
} from "@/data/portfolio";
|
||||
import { getHomeStructuredData } from "@/data/seo";
|
||||
|
||||
export function HomePage({ language }: { language: Language }) {
|
||||
const dir = getDirection(language);
|
||||
const t = portfolioContent[language];
|
||||
const founderName = language === "ar" ? sharedProfile.founderNameAr : sharedProfile.founderNameEn;
|
||||
const address = language === "ar" ? sharedProfile.addressAr : sharedProfile.address;
|
||||
const structuredData = getHomeStructuredData(language);
|
||||
const heroImageAlt =
|
||||
language === "ar"
|
||||
? "لوحة بورتفوليو لمجمع إعلامي ومبنى التلفزيون"
|
||||
@@ -50,6 +53,7 @@ export function HomePage({ language }: { language: Language }) {
|
||||
|
||||
return (
|
||||
<SiteShell language={language}>
|
||||
<JsonLd data={structuredData} />
|
||||
<div className="top-wash pointer-events-none absolute inset-x-0 top-0 h-[720px]" />
|
||||
|
||||
<main className="site-container flex flex-col gap-12 py-6 md:gap-14 md:py-8 lg:gap-16 lg:py-10">
|
||||
|
||||
7
components/json-ld.tsx
Normal file
7
components/json-ld.tsx
Normal file
@@ -0,0 +1,7 @@
|
||||
type JsonLdProps = {
|
||||
data: Record<string, unknown> | Array<Record<string, unknown>>;
|
||||
};
|
||||
|
||||
export function JsonLd({ data }: JsonLdProps) {
|
||||
return <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />;
|
||||
}
|
||||
@@ -1,16 +1,20 @@
|
||||
import Link from "next/link";
|
||||
import { JsonLd } from "@/components/json-ld";
|
||||
import { SectionHeading } from "@/components/section-heading";
|
||||
import { SiteShell } from "@/components/site-shell";
|
||||
import { portfolioContent, resumeFile, sharedProfile, type Language } from "@/data/portfolio";
|
||||
import { getResumeStructuredData } from "@/data/seo";
|
||||
|
||||
export function ResumePageContent({ language }: { language: Language }) {
|
||||
const t = portfolioContent[language];
|
||||
const brandName = language === "ar" ? sharedProfile.brandNameAr : sharedProfile.brandNameEn;
|
||||
const address = language === "ar" ? sharedProfile.addressAr : sharedProfile.address;
|
||||
const hasResume = resumeFile.available;
|
||||
const structuredData = getResumeStructuredData(language);
|
||||
|
||||
return (
|
||||
<SiteShell language={language}>
|
||||
<JsonLd data={structuredData} />
|
||||
<main className="site-container flex flex-col gap-10 py-8 md:py-10 lg:gap-12 lg:py-12">
|
||||
<section className="section-shell hero-glow">
|
||||
<div className="section-padding grid gap-8 lg:grid-cols-[1fr_auto] lg:items-end">
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم