Metadata API และ SEO ใน App Router
ส่งออกออบเจ็กต์เมทาดาทาแบบคงที่และไดนามิกเพื่อตั้งชื่อหน้า คำอธิบาย และแท็ก OG
Metadata API และ SEO ใน App Router เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดเมทาดาทาจึงสำคัญ
เมทาดาทาที่ดี (ชื่อ คำอธิบาย และแท็ก OG) ช่วยปรับปรุงอันดับ SEO และตัวอย่างการแชร์บนโซเชียล Next.js App Router มี Metadata API ที่ตรวจสอบชนิดข้อมูลได้ ซึ่งสร้างแท็ก <head> บนเซิร์ฟเวอร์
การส่งออกเมทาดาทาแบบสแตติก
ส่งออกออบเจ็กต์ metadata จาก page.tsx หรือ layout.tsx ใดก็ได้ เพื่อกำหนดแท็กแบบสแตติกสำหรับเซกเมนต์นั้น
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'My App',
description: 'The best app ever built',
keywords: ['react', 'nextjs', 'typescript'],
};
export default function Page() { return <main>Hello</main>; }แม่แบบชื่อเรื่อง
ใช้ title.template ในโครงสร้าง เพื่อให้หน้าลูกได้รับชื่อเรื่องที่จัดรูปแบบโดยอัตโนมัติโดยไม่ต้องเขียนชื่อเว็บไซต์ซ้ำ
// app/layout.tsx
export const metadata: Metadata = {
title: {
template: '%s | My App',
default: 'My App',
},
};
// app/about/page.tsx
export const metadata: Metadata = {
title: 'About', // renders as "About | My App"
};เมทาดาทาแบบไดนามิกด้วย generateMetadata
ส่งออกฟังก์ชันอะซิงโครนัส generateMetadata สำหรับเส้นทางที่ต้องใช้แท็กตามข้อมูล โดยฟังก์ชันนี้จะได้รับ params และเมทาดาทาของส่วนแม่
export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
const product = await getProduct(params.id);
return {
title: product.name,
description: product.summary,
openGraph: {
title: product.name,
images: [product.imageUrl],
},
};
}แท็ก Open Graph
คีย์ openGraph ใช้กำหนดแท็ก OG สำหรับการแชร์บน Facebook, LinkedIn และ Slack
export const metadata: Metadata = {
openGraph: {
title: 'My Product',
description: 'Buy now!',
url: 'https://example.com/product',
siteName: 'My App',
images: [{ url: 'https://example.com/og.png', width: 1200, height: 630 }],
type: 'website',
locale: 'en_US',
},
};แท็กการ์ด Twitter
คีย์ twitter ใช้กำหนดเมทาดาทาของการ์ดเฉพาะ Twitter เพื่อสร้างตัวอย่างแบบสมบูรณ์ในทวีต
twitter: {
card: 'summary_large_image',
title: 'My Product',
description: 'Buy now!',
images: ['https://example.com/twitter.png'],
creator: '@myhandle',
},โรบอตและ URL หลัก
ควบคุมการรวบรวมข้อมูลด้วย robots และกำหนด URL หลักเพื่อป้องกันบทลงโทษจากเนื้อหาซ้ำ
export const metadata: Metadata = {
robots: { index: true, follow: true, googleBot: { index: true } },
alternates: { canonical: 'https://example.com/products' },
};ไอคอนเว็บไซต์และไอคอนทั่วไป
วางไฟล์ไอคอนไว้ใน app/ โดยใช้ชื่อสงวน (icon.png, apple-icon.png, favicon.ico) หรือประกาศไอคอนเหล่านั้นใน metadata.icons
// Convention: place app/icon.png → auto-detected as favicon
// Or declare explicitly:
export const metadata: Metadata = {
icons: {
icon: '/icon.png',
apple: '/apple-icon.png',
shortcut: '/shortcut-icon.png',
},
};การสร้างภาพ OG ด้วย ImageResponse
ใช้ ImageResponse จาก next/og ใน route.ts เพื่อสร้างภาพ OG แบบไดนามิก โดยแสดงผล JSX เป็น PNG
// app/og/route.ts
import { ImageResponse } from 'next/og';
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const title = searchParams.get('title') ?? 'Default';
return new ImageResponse(
<div style={{ fontSize: 48, background: '#fff', width: '100%', height: '100%' }}>
{title}
</div>,
{ width: 1200, height: 630 }
);
}ข้อมูลแบบมีโครงสร้าง (JSON-LD)
เพิ่มข้อมูลแบบมีโครงสร้าง JSON-LD ด้วยการแทรกแท็ก <script> ใน JSX ของหน้า ข้อมูลนี้ไม่ได้เป็นส่วนหนึ่งของ Metadata API แต่ทำงานร่วมกับ API ได้
export default function ProductPage({ product }) {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
price: product.price,
};
return (
<>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
<h1>{product.name}</h1>
</>
);
}การตรวจสอบเมทาดาทา
ใช้ DevTools ของเบราว์เซอร์ (แท็บเครือข่ายและการดูซอร์ส HTML) หรือเครื่องมืออย่าง opengraph.xyz เพื่อตรวจสอบว่าเมทาดาทาแสดงผลอย่างถูกต้องใน HTML ฝั่งเซิร์ฟเวอร์
ตรวจสอบอย่างรวดเร็ว
ฟีเจอร์ใดของ Metadata API ของ Next.js ที่ทำให้หน้าลูกสืบทอดและปรับแต่งส่วนต่อท้ายชื่อเรื่องร่วม เช่น 'เกี่ยวกับ | แอปของฉัน' ได้
สรุป
ส่งออก metadata สำหรับแท็กแบบสแตติก หรือใช้ generateMetadata() สำหรับแท็กแบบไดนามิก ใช้ title.template ในโครงสร้างเพื่อให้ชื่อเรื่องเป็นไปตามหลัก DRY กำหนด openGraph และ twitter สำหรับตัวอย่างบนโซเชียล และใช้ ImageResponse ในตัวจัดการเส้นทางเพื่อให้บริการภาพ OG แบบไดนามิก
คำถามที่พบบ่อย
บทเรียน “Metadata API และ SEO ใน App Router” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Metadata API และ SEO ใน App Router” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Metadata API และ SEO ใน App Router”
ส่งออกออบเจ็กต์เมทาดาทาแบบคงที่และไดนามิกเพื่อตั้งชื่อหน้า คำอธิบาย และแท็ก OG คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “Metadata API และ SEO ใน App Router” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบการตั้งชื่อไฟล์ของ App Router
- คอมโพเนนต์ฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์ใน Next.js
- เส้นทางแบบไดนามิกและกลุ่มเส้นทาง
- Metadata API และ SEO ใน App Router