Next.js से MDX ब्लॉग खुद बनाना - यह ब्लॉग कैसे बना
बिना CMS के सिर्फ़ मार्कडाउन फ़ाइलों से चलने वाला ब्लॉग Next.js 16 App Router से बनाने की पूरी प्रक्रिया। फ़ोल्डर स्ट्रक्चर, MDX सेटअप और SEO तक, असल कोड फ़्लो के साथ समझाया है।
मुख्य सारांश
पोस्ट को src/content/posts के नीचे .mdx फ़ाइल के रूप में रखें और @next/mdx से रेंडर करें, तो बिना CMS के भी ब्लॉग चल जाता है। फ़ाइल ही URL है, frontmatter की जगह meta export से लिस्ट और मेटाडेटा बनते हैं।
इस पेज पर
अभी आप जो ब्लॉग पढ़ रहे हैं, उसमें न कोई डेटाबेस है, न कोई एडमिन पैनल। हर पोस्ट बस एक मार्कडाउन फ़ाइल है। कैसे बनाया, वह पूरा यहां खोलकर बता रहा हूं।
फ़ाइल-बेस्ड क्यों
ब्लॉग टूल बहुत सारे हैं, लेकिन सोलो डेवलपर के लिए ज़्यादातर ज़रूरत से ज़्यादा भारी हैं।
- CMS: एडमिन पैनल, इंटीग्रेशन और फ़ीस साथ आती हैं
- Notion इंटीग्रेशन: आसान है, लेकिन रेंडरिंग, स्पीड और कस्टमाइज़ेशन में अटक जाता है
- मार्कडाउन फ़ाइलें: पोस्ट कोड के साथ वर्ज़न कंट्रोल में रहती हैं, मुफ़्त हैं, और
git pushही पब्लिश है
मैंने तीसरा चुना। friction सबसे कम है।
फ़ोल्डर स्ट्रक्चर
मुख्य हिस्सा देखें तो कुछ ऐसा दिखता है।
src/
├── app/
│ ├── page.tsx # 홈 - 글 목록
│ ├── posts/[slug]/page.tsx # 글 상세
│ └── sitemap.ts # /sitemap.xml
├── content/posts/*.mdx # ← 글은 여기에만 추가
└── lib/posts.ts # 목록·메타 로딩
फ़ाइल का नाम ही URL बन जाता है। hello.mdx खुलती है /posts/hello पर।
MDX सेटअप
App Router में MDX इस्तेमाल करने के लिए @next/mdx जोड़ते हैं। Next 16 में Turbopack डिफ़ॉल्ट है, इसलिए remark/rehype प्लगइन को स्ट्रिंग नाम के रूप में पास करना पड़ता है (फ़ंक्शन रेफ़रेंस पास नहीं कर सकते)।
const withMDX = createMDX({
options: {
remarkPlugins: ["remark-gfm"], // 표·취소선 지원
rehypePlugins: ["rehype-slug"], // 제목 앵커
},
})
frontmatter की जगह meta export
आम तौर पर मार्कडाउन के ऊपर --- ब्लॉक (frontmatter) में टाइटल और डेट लिखते हैं, लेकिन MDX में जावास्क्रिप्ट समा सकती है, इसलिए एक और साफ़ तरीक़ा है। बस ऑब्जेक्ट को export कर देना।
export const meta = {
title: "글 제목",
date: "2026-07-06",
category: "dev",
}
## 본문 시작
लिस्ट पेज पर हर फ़ाइल को dynamic import करके सिर्फ़ यह meta पढ़ते हैं।
const mod = await import(`@/content/posts/${slug}.mdx`)
return mod.meta // 본문 렌더 없이 메타만
न पार्सिंग लाइब्रेरी चाहिए, न अलग से कोई इंडेक्स।
SEO शुरुआत से ही
अगर ब्लॉग का मक़सद ट्रैफ़िक लाना है, तो SEO बाद में नहीं, शुरुआत में ही डालना चाहिए। मैंने हर पोस्ट के मेटाडेटा, Open Graph और JSON-LD स्ट्रक्चर्ड डेटा के साथ sitemap.xml, robots.txt और rss.xml तक बुनियादी तौर पर लगा दिए। इस पर अगली पोस्ट में और विस्तार से बात करूंगा।
सार
- पोस्ट = एक
.mdxफ़ाइल, फ़ाइल का नाम ही URL @next/mdx+ स्ट्रिंग प्लगइन (Turbopack)- frontmatter की जगह
export const meta - SEO पहले कमिट से ही
इसी स्ट्रक्चर से आपका ब्लॉग भी 30 मिनट में खड़ा हो सकता है। मैं इसी तरीक़े से आज की लहर जैसे प्रोडक्ट की कहानियां लगातार जमा कर रहा हूं।
अक्सर पूछे जाने वाले सवाल
CMS की जगह MDX फ़ाइलें क्यों इस्तेमाल करते हैं?
पोस्ट कोड के साथ वर्ज़न कंट्रोल में रहती हैं, मुफ़्त है, और डिप्लॉय ही पब्लिश है, इसलिए सोलो डेवलपर के लिए सबसे कम friction वाला तरीक़ा है। इमेज, कोड और कंपोनेंट भी आज़ादी से डाल सकते हैं।
frontmatter के बिना लिस्ट कैसे बनाते हैं?
हर .mdx के ऊपर meta ऑब्जेक्ट export करें, और लिस्ट पेज पर फ़ाइल को dynamic import करके सिर्फ़ वह meta पढ़ लें। अलग से किसी पार्सिंग लाइब्रेरी की ज़रूरत नहीं पड़ती।
संबंधित लेख
- 💻 डेवलपमेंट
5 ऐप एक ही रिपॉज़िटरी में - सोलो डेवलपर का Turborepo मोनोरेपो
कई ऐप और वेब को एक रिपॉज़िटरी में मैनेज करने वाला Turborepo मोनोरेपो सेटअप। साझा कॉन्फ़िग शेयर करना, कैश से बिल्ड बचाना और ऐप-वार डिप्लॉय तक, व्यावहारिक नज़रिए से समझाया है।
- 💻 डेवलपमेंट
मिनी PC पर Docker + Cloudflare Tunnel से सेल्फ़ होस्टिंग
घर के एक मिनी PC से कई वेब सर्विस सुरक्षित तरीक़े से पब्लिक करने का तरीक़ा। बिना पोर्ट खोले Cloudflare Tunnel से HTTPS जोड़ते हैं और Docker Compose से चलाते हैं।
- 📚 सीखना
अंग्रेज़ी शब्द रटने के बजाय 'अपने वाक्य' में क्यों बदलने चाहिए
वोकैब लिस्ट कितनी भी रट लो, बोलते समय शब्द क्यों नहीं निकलते, इसकी असली वजह और आज देखी हुई चीज़ों को अपने वाक्यों में बदलकर याद रखने का तरीका यहां बताया है।