Production SEO: Mastering Next.js Metadata API for Dynamic Routes
Next.js এর ট্র্যাডিশনাল Pages আর্কিটেকচারে <Head> ট্যাগের ভেতর মেটা ট্যাগ ডিক্লেয়ার করা হতো। তবে আধুনিক **App Router** মডেলে এসইও অপ্টিমাইজেশন বুস্ট করার জন্য অফিসিয়াল বিল্ট-ইন **Metadata API** আনা হয়েছে। এটি টাইটেল, ডেসক্রিপশন বা ওজি ইমেজ কনফিগার করা সহজ করার পাশাপাশি ক্লায়েন্ট-সাইড মেমোরি ফাঁকা রেখে সার্ভার লেভেলেই এসইও কম্পাইল সম্পন্ন করে।
এই ব্লগে আমরা দেখবো কীভাবে স্ট্যাটিক ও ডাইনামিক রাউটের (যেমন- ব্লগ বা প্রোডাক্ট পেজ) জন্য রিয়েল-টাইম এসইও ডেটা ইনজেক্ট করতে হয়।
১. স্ট্যাটিক মেটাডেটা অবজেক্ট (Static Layouts)
যে পেজগুলোর টাইটেল ফিক্সড বা অপরিবর্তনশীল, সেগুলোর জন্য পেজের ফাইল বা layout.js-এ নিচের অবজেক্টটি এক্সপোর্ট করতে হবে:
// app/page.js অথবা app/about/page.js
export const metadata = {
title: 'Home | Ahyan Creations LTD',
description: 'Premium Digital Solutions Provider and Open-Source Labs.',
openGraph: {
title: 'Ahyan Creations Studio',
description: 'Scaling infrastructures with cutting edge software.',
images: [{ url: 'https://ahyancreations.top/og-core.png' }],
},
};
export default function Page() {
return <h1>Welcome to Enterprise Dashboard</h1>;
}
ধাপ ২: ডায়নামিক মেটাডেটা জেনারেশন (`generateMetadata`)
ব্লগ পেজের ক্ষেত্রে যেখানে আইডি বা স্লাগ (Slug) অনুযায়ী ডাটাবেজ থেকে ডেটা তুলে মেটা ট্যাগ বসাতে হয়, সেখানে generateMetadata ফাংশন ব্যবহার করতে হবে:
// app/posts/[slug]/page.js
// এই ফাংশনটি স্বয়ংক্রিয়ভাবে নেক্সট ডট জেএস কল করবে
export async function generateMetadata({ params }) {
const currentSlug = params.slug;
// ডাটাবেজ বা এপিআই থেকে কন্টেন্ট নিয়ে আসা (সিমুলেটেড)
const postData = await fetch(`https://api.ahyancreations.top/posts/${currentSlug}`).then((res) => res.json());
return {
title: `${postData.title} | Technical Center`,
description: postData.excerpt,
openGraph: {
title: postData.title,
description: postData.excerpt,
images: [{ url: postData.featuredImage }],
},
};
}
export default function BlogPost({ params }) {
return <main>Dynamic Content Render Container</main>;
}
সার্ভার অপ্টিমাইজেশন টিপস: আপনি যদি একই এপিআই রিকোয়েস্ট generateMetadata ফাংশনের ভেতর এবং মেইন কম্পোনেন্ট BlogPost এর ভেতরও কল করেন, তবুও কোনো পারফরম্যান্স লস হবে না। Next.js তার বিল্ট-ইন Fetch Data Cache Deduplication মেকানিজমের মাধ্যমে ব্যাকএন্ডে মাত্র একবারই নেটওয়ার্ক রিকোয়েস্ট ফায়ার করবে।