Schema Markup / Data Structure มี่กี่ชนิด
ปัจจุบัน 3 Type of Schema markup ที่นิยม มีดังนี้
- RDFa
- Microdata
- JSON-LD
บทความนี้ ผมโฟกัสเฉพาะ JSON-LD (JavaScript Object Notation for Linked Data) เนื่องจากเป็นรูปแบบซึ่งกูเกิ้ลแนะนำ และนิยมใช้ในเว็บไซต์มากที่สุด
JSON-LD schema markup core components
JSON-LD Core Components คือ คีย์เวิร์ดและรูปแบบการเขียน JSON-LD schema markup โดยเหตุผลที่เราควรเข้าใจ Core Components ก็เพราะ ทำให้สร้าง JSON-LD schema markup ได้ด้วยตัวเอง เนื่องจาก การติดตั้ง Schema markup บนเว็บไซต์มี 2 ทางเลือก คือ ใช้เครื่องมือซึ่งเสียเงินรายปี กับ ติดตั้งเอง (ฟรี) ดังนั้นหากเราสร้างและติดตั้งได้เอง จะประหยัดค่าใช้จ่ายได้มาก
โดยคีย์เวิรด์และรูปแบบการเขียน มีดังนี้
1. Script Wrapper
JSON-LD ทั้งหมดต้องอยู่ใต้ HTML <script> ชนิดพิเศษ เพื่อแจ้งบ็อตของเสิร์ชเอ็นจิน (เช่น Googlebot) ทราบว่า ข้างในคือข้อมูลที่มีโครงสร้าง (Linked Data)
- รูปแบบ: <script type=”application/ld+json”> … </script>
2. @context
@context คือการยืนยันว่า โครงสร้างข้อมูลอ้างอิงตามมาตรฐานของ Schema.org ส่งผลให้เสิร์ชเอ็นจินเข้าใจนิยามของคีย์เวิรด์ต่างๆ
- ค่ามาตรฐานที่ใช้: “@context”: “https://schema.org”
3. @type | Properties
@type คือการระบุว่า เว็บเพจคือ “อะไร”
Properties คือ รายละะอียดของ @type
รูปแบบ (syntax)
“@type”: “ประเภทของข้อมูล”,
“Properties”: “value 1”,
“Properties”: “value 2”
ตัวอย่าง
- อธิบายข้อมูลประเภท “สินค้า”
@type”: “Product”,
“name”: “สมาร์ตโฟนไร้สาย รุ่น Nexus X1”,
“description”: “สมาร์ตโฟนหน้าจอ OLED ขนาด 6.5 นิ้ว พร้อมระบบชาร์จไวและกล้อง AI”
คุณสมบัติของ @type กับ Properties
การเข้าใจคุณสมบัติของ @type กับ Properties คือสิ่งสำคัญมาก เพราะทำให้สร้าง JSON-LD schema markup ได้ถูกต้อง มีคุณสมบัติดังนี้
- @Types มี Properties ของตัวเอง
แต่ละ @Type มี Properties ของตัวเอง ตัวอย่างเช่น หากคุณเลือก @type = @Product , Properties ที่เลือกใช้ต้องเป็นของ @Product เท่านั้น
คำถามคือ แล้วรู้ได้ไงว่า @Product มี Properties อะไรบ้าง
คำตอบคือ ไปที่ schema.org >> ค้นหา “Product” >> ปรากฏ Properties list ซึ่งใช้กับ Product ได้
- Inheritance Type : @Types[ลูก] ได้ Properties ทั้งหมดของ Types[แม่]
@Type มีลักษณะเป็น “ลำดับขั้น” โดยลำดับบนสุดคือ @Thing จากนั้นคือลำดับขั้นรองลงมาคือ @Action , @Event , @Organization …..] ตัวอย่างตามรูป
คุณสมบัติของ @Typeคือ @Types[ลูก] ได้ Properties ทั้งหมดของ Types[แม่]
ตัวอย่างเช่น เราเขียน schema markup ของ @Restaurant ที่มีลำดับขั้นดังนี้
สมมุติว่า @Thing & @Organization มี Property ดังนี้
| Property | มาจาก |
|---|---|
| ชั้นที่ 1 — Thing · ชั้นสูงสุด ทุก Type สืบทอดจากที่นี่ | |
name |
Thing |
description |
Thing |
url |
Thing |
image |
Thing |
sameAs |
Thing |
identifier |
Thing |
| ชั้นที่ 2 — Organization · สืบทอดจาก Thing + เพิ่ม Properties ของตัวเอง | |
address |
Organization |
telephone |
Organization |
email |
Organization |
logo |
Organization |
foundingDate |
Organization |
numberOfEmployees |
Organization |
ดังนั้น @Restaurant สามารถใช้ Properties ของ @Thing & @Organization ได้ เนื่องจากเป็นลำดับชั้นรองที่อยู่ใต้ @Thing & @Organization นั่นเองครับ
- Properties มี “Value Type”
Value Type คือ ชนิดข้อมูลของ Properties มีทั้งหมด 6 ชนิด
| Type | รูปแบบ | ตัวอย่าง |
|---|---|---|
| ค่าข้อความ — กลุ่มที่ใช้บ่อยที่สุด | ||
| Text | ข้อความในเครื่องหมาย "..." |
"servesCuisine": "Thai""name": "ร้านข้าวต้มปลา" |
| URL | ลิงก์ขึ้นต้นด้วย https:// |
"url": "https://example.com""image": "https://example.com/img.jpg" |
| ค่าตัวเลขและตรรกะ — ห้ามใส่เครื่องหมายคำพูด | ||
| Number | ตัวเลขล้วน ไม่มี "..." |
"ratingValue": 4.5"reviewCount": 128 |
| Boolean | true หรือ false เท่านั้น |
"isAccessibleForFree": true"isFamilyFriendly": false |
| ค่าวันที่และโครงสร้าง — ต้องใช้รูปแบบที่กำหนด | ||
| Date | ISO 8601 รูปแบบ YYYY-MM-DD |
"datePublished": "2025-06-01""startDate": "2025-12-31T18:00:00+07:00" |
| Object | ซ้อน Schema type ข้างใน ต้องมี @type |
"address": {"@type": "PostalAddress","addressCountry": "TH"}
|
"...""servesCuisine": "Thai""name": "ร้านข้าวต้มปลา"https://"url": "https://example.com""image": "https://example.com/img.jpg""...""ratingValue": 4.5"reviewCount": 128true หรือ false เท่านั้น"isAccessibleForFree": true"isFamilyFriendly": falseYYYY-MM-DD"datePublished": "2025-06-01""startDate": "2025-12-31T18:00:00+07:00"@type"address": {"@type": "PostalAddress","addressCountry": "TH"}
ในเว็บ schema.org จะระบุว่า Properties ต้องใช้ Value Type อะไร ตัวอย่างเช่น
Nested Objects คือ Value Type ที่เป็น Schema type เป็นการใส่ Schema type ซ้อนอยู่ภายใน Schema type อีกตัวหนึ่ง
ตัวอย่างเช่น
