Next js metadata not working?
Md. Aminul Islam•
Post Date:19 Feb 2026 - 05:42 AM
Next.js App Router-এ Metadata কেন শুধু Server Component-এ কাজ করে?
আমি যখন প্রথম Next.js App Router-এ একটা blog project বানাচ্ছিলাম, তখন একটা অদ্ভুত সমস্যা দেখলাম—
✅ Facebook-এ link share করলে thumbnail আসছে না
✅ Title/Description ঠিক মতো show হচ্ছে না
খুঁজতে গিয়ে বুঝলাম—আমি metadata set করেছিলাম Client Component-এ।
আর App Router-এ এটা কাজ করে না।
আজকে এই concept টা একবারে clear করে দেই।
Server Component vs Client Component — Metadata কোথায় কাজ করে?
Server Component → ✅ Metadata কাজ করে
Client Component → ❌ Metadata কাজ করে না
Next.js App Router-এ
page.tsx এবং layout.tsx ডিফল্টভাবে Server Component।যখন কোনো page-এ request আসে, Next.js মোটামুটি এই flow follow করে:
- Server Component run হয়
metadataবাgenerateMetadata()execute হয়
- HTML +
<head>tag তৈরি হয়
- এরপর Client-side bundle attach হয়
👉 এই সময় Client Component এখনো browser-এ run শুরুই করেনি।
তাই Client Component থেকে metadata generate করা সম্ভব না।
"use client" থাকলে metadata কেন কাজ করে না?
ধরো তুমি এমন করলা—
এটা কাজ করবে না, কারণ:
- Client Component browser-এ run করে
- কিন্তু metadata server-side এ
<head>-এ inject হয়
- Browser-side component দিয়ে Next.js
<head>build করে না
✅ Next.js metadata system আসলে “server-first”।
সঠিক Architecture কেমন হওয়া উচিত?
❌ ভুল পদ্ধতি
page.tsx→"use client"
- metadata export
- → কাজ করবে না
✅ সঠিক পদ্ধতি
Server Component handle করবে:
- SEO
- metadata
- Open Graph / Twitter card
Client Component handle করবে:
useState
useEffect
- event handlers
- UI interactions
Static Metadata (Blog List Page)
Dynamic Metadata (Blog Detail Page)
✅ এখানে HTML তৈরি হওয়ার আগেই metadata ready থাকে।
ফলে Facebook/LinkedIn crawler scrape করলে সঠিক thumbnail পায়।
SEO-এর জন্য কেন এটা জরুরি?
Google, Facebook, LinkedIn crawler সাধারণত:
- JavaScript execute করে না (বা পুরোপুরি করে না)
- শুধু initial HTML পড়ে
তাই:
- Open Graph image
- title
- description
- Twitter Card metadata
সবকিছু server-rendered HTML-এ থাকা লাগবে।
Verify করতে চাইলে
Browser → Right click → View Page Source
তারপর খুঁজে দেখো:
👉 এটা server থেকেই inject হয়েছে।
Server Component = Architect
Building-এর structure বানায় (HTML + Head)
Client Component = Interior Designer
UI সাজায় + interactivity দেয়
Architect ছাড়া building দাঁড়াবে না।
Designer ছাড়া building usable হবে না।
✅ Metadata অবশ্যই Server Component-এ set করতে হবে
❌ Client Component metadata support করে না
✅ SEO + OG + Twitter Card = server-side
✅ Static page →
export const metadata
✅ Dynamic page → generateMetadata()

