ข้ามไปยังเนื้อหาหลัก

Next.js 16 App Router

ใช้งานและตรวจสอบอิมเมจ OG ในแอป Next.js

เลือก metadata แบบคงที่, generateMetadata ที่รับรู้เส้นทาง หรือ opengraph-image ที่สร้างขึ้น ใช้ URL แบบสัมบูรณ์สาธารณะ และตรวจสอบผลลัพธ์ที่ปรับใช้

เลือกตามไฟล์หรือตามรหัส metadata จงใจ

ใช้การส่งออกออบเจ็กต์ metadata แบบคงที่สำหรับค่าคงที่และ generateMetadata เมื่อข้อมูลเส้นทางเปลี่ยนชื่อ คำอธิบาย หรือรูปภาพ การส่งออกทั้งสองอยู่ใน Server Components

ไฟล์ชื่อ opengraph-image สามารถจัดเตรียม metadata แบบไฟล์ได้ opengraph-image.tsx ที่สร้างขึ้นสามารถส่งคืน ImageResponse เมื่อภาพขึ้นอยู่กับข้อมูลเส้นทาง อย่าส่งออก metadata และ generateMetadata แบบคงที่จากส่วนเส้นทางเดียวกัน

metadata แบบคงที่พร้อม metadataBase

metadataBase ใช้แก้ URL metadata แบบสัมพัทธ์ ส่วน URL รูปสาธารณะแบบเต็ม เช่น https://starterpackai.com/og/home.png ช่วยให้ตรวจจากภายนอกแอปได้ง่าย

tsx
import type { Metadata } from 'next'

export const metadata: Metadata = {
  metadataBase: new URL('https://starterpackai.com'),
  title: 'A clear page title',
  description: 'A concise share description',
  openGraph: {
    images: ['https://starterpackai.com/og/home.png'],
  },
}

การรับรู้เส้นทาง generateMetadata ใน Next.js 16

ใน Next.js 16 App Router ค่า params เป็น Promise จึงต้อง await params ก่อนโหลดข้อมูลของเส้นทางและส่งคืน generateMetadata

tsx
import type { Metadata } from 'next'

type Props = { params: Promise<{ slug: string }> }

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { slug } = await params
  const post = await getPost(slug)

  return {
    title: post.title,
    openGraph: { images: [post.ogImageUrl] },
  }
}

ไดนามิก opengraph-image พร้อม ImageResponse

ใน opengraph-image.tsx ฝั่งเซิร์ฟเวอร์ ให้ await params แล้วส่งคืน ImageResponse ด้วยขนาดที่ระบุชัดเจน

tsx
import { ImageResponse } from 'next/og'

export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default async function Image({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = await params
  return new ImageResponse(
    <div style={{ display: 'flex', padding: 80 }}>{slug}</div>,
    size
  )
}

รายการตรวจสอบการยืนยันการทำให้ใช้งานได้

  • ยืนยันว่า metadata หรือ generateMetadata ทำงานในส่วนเส้นทางของส่วนประกอบเซิร์ฟเวอร์
  • เปิด HTML ที่ปรับใช้ และตรวจสอบค่า og:title, og:description และ og:image สุดท้าย
  • เปิดรูปภาพสาธารณะแบบสัมบูรณ์ URL ในเซสชันแยกต่างหาก และตรวจสอบการตอบสนองของรูปภาพที่สำเร็จ
  • ตรวจสอบองค์ประกอบ 1200×630 ที่เรนเดอร์ด้วยลิงก์การ์ดขนาดเล็ก
  • เรียกใช้ตัวตรวจสอบ metadata สาธารณะ จากนั้นใช้ดีบักเกอร์เฉพาะแพลตฟอร์มเมื่อแคชไม่เห็นด้วย

คู่มือ Next.js

คำถามรูป OG ใน Next.js

ตัวเลือก App Router สำคัญสำหรับหน้าสแตติกและไดนามิก

ควรใช้ metadata หรือ generateMetadata?

ใช้ metadata สำหรับค่าคงที่ และ generateMetadata เมื่อเนื้อหาขึ้นกับข้อมูลของเส้นทาง

ใช้ไฟล์ opengraph-image ได้ไหม?

ได้ App Router รองรับเมทาดาทาจากไฟล์ ส่วน API metadata เหมาะกับการควบคุมที่ชัดเจนหรือไดนามิก

ทำไม URL รูปควรเป็นแบบเต็ม?

บอตโซเชียลดึงรูปนอกเซสชันเบราว์เซอร์ URL สาธารณะแบบเต็มจึงเข้าถึงได้ตรงไปตรงมา

เผยแพร่รูปและเมทาดาทาพร้อมกัน

สร้างชิ้นงาน คัดลอกโค้ด Next.js และตรวจผลการดีพลอย