10.2 מטא תגיות ומידע מובנה הרצאה
מטא תגיות ומידע מובנה - Meta Tags and Structured Data¶
בשיעור זה נצלול לעולם של מטא-תגיות ומידע מובנה. נלמד כיצד לספק למנועי חיפוש ולרשתות חברתיות מידע מדויק על התוכן שלנו, וכיצד ליישם את כל זה עם Next.js.
מטא-תגיות חיוניות - Essential Meta Tags¶
מטא-תגיות הן אלמנטי HTML שנמצאים בתוך ה-<head> ומספקים מידע על הדף למנועי חיפוש ולדפדפנים.
כותרת - title¶
- התגית החשובה ביותר ל-SEO
- מופיעה בכרטיסיית הדפדפן ובתוצאות החיפוש
- אורך מומלץ: 50-60 תווים
- צריכה לכלול את מילת המפתח הראשית
- כל דף חייב כותרת ייחודית
<!-- טוב -->
<title>מדריך React Hooks למתחילים | DevAcademy</title>
<!-- רע - כללי מדי -->
<title>דף הבית</title>
<!-- רע - ארוך מדי -->
<title>מדריך מלא ומקיף ללימוד React Hooks כולל useState, useEffect, useContext, useReducer ועוד הרבה Hooks שימושיים למתחילים ומתקדמים</title>
תיאור - description¶
- מופיע מתחת לכותרת בתוצאות החיפוש
- אורך מומלץ: 120-155 תווים
- צריך לתאר את התוכן ולעודד את המשתמש ללחוץ
- לא משפיע ישירות על דירוג, אבל משפיע על CTR (שיעור הקליקים)
<meta
name="description"
content="למדו React Hooks מאפס. מדריך מעשי עם דוגמאות קוד ל-useState, useEffect ו-useContext. כולל תרגילים."
/>
תגית viewport¶
- חיונית לתצוגה תקינה במובייל
- ללא תגית זו, האתר לא ייחשב mobile-friendly
קידוד תווים - charset¶
- מגדיר את קידוד התווים של הדף
- כמעט תמיד UTF-8
תגית robots¶
- מכתיבה למנועי חיפוש האם לאנדקס את הדף ולעקוב אחרי קישורים
<!-- לאפשר אינדוקס ומעקב אחרי קישורים (ברירת מחדל) -->
<meta name="robots" content="index, follow" />
<!-- למנוע אינדוקס -->
<meta name="robots" content="noindex, nofollow" />
<!-- לאנדקס אבל לא לעקוב אחרי קישורים -->
<meta name="robots" content="index, nofollow" />
<!-- למנוע הצגה בקאש של Google -->
<meta name="robots" content="noarchive" />
פרוטוקול Open Graph¶
- פרוטוקול שפיתח Facebook לשליטה באופן שבו תוכן מוצג כשמשתפים קישור ברשתות חברתיות
- מאפשר להגדיר כותרת, תיאור, תמונה וסוג תוכן
- משמש גם אפליקציות מסרים כמו WhatsApp, Telegram, Slack ועוד
תגיות Open Graph בסיסיות¶
<meta property="og:title" content="מדריך React Hooks למתחילים" />
<meta property="og:description" content="למדו React Hooks מאפס עם דוגמאות קוד מעשיות" />
<meta property="og:image" content="https://devacademy.co.il/images/react-hooks-guide.jpg" />
<meta property="og:url" content="https://devacademy.co.il/blog/react-hooks-guide" />
<meta property="og:type" content="article" />
<meta property="og:locale" content="he_IL" />
<meta property="og:site_name" content="DevAcademy" />
סוגי תוכן - og:type¶
website- ברירת מחדל לדף רגילarticle- מאמר או פוסט בבלוגproduct- מוצרprofile- פרופיל אישיvideo.movie- סרט
תגיות Open Graph למאמר¶
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2026-03-01T10:00:00Z" />
<meta property="article:modified_time" content="2026-03-05T14:30:00Z" />
<meta property="article:author" content="https://devacademy.co.il/authors/dana" />
<meta property="article:section" content="פיתוח ווב" />
<meta property="article:tag" content="React" />
<meta property="article:tag" content="Hooks" />
דרישות לתמונת Open Graph¶
- גודל מומלץ: 1200x630 פיקסלים
- גודל מינימלי: 600x315 פיקסלים
- פורמט: JPG או PNG
- גודל קובץ: עד 5MB (מומלץ פחות מ-1MB)
- התמונה חייבת להיות נגישה מ-URL ציבורי
כרטיסי טוויטר - Twitter Cards¶
- בדומה ל-Open Graph, אבל ספציפי לטוויטר (X)
- טוויטר משתמש גם בתגיות OG כ-fallback
<!-- כרטיס גדול עם תמונה -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@devacademy" />
<meta name="twitter:creator" content="@dana_dev" />
<meta name="twitter:title" content="מדריך React Hooks למתחילים" />
<meta name="twitter:description" content="למדו React Hooks מאפס עם דוגמאות קוד מעשיות" />
<meta name="twitter:image" content="https://devacademy.co.il/images/react-hooks-guide.jpg" />
סוגי כרטיסים¶
summary- כרטיס קטן עם תמונה מרובעתsummary_large_image- כרטיס גדול עם תמונה רחבה (הכי נפוץ)player- לתוכן וידאוapp- לאפליקציות
כתובות קנוניות - Canonical URLs¶
- מגדירות את הגרסה המועדפת של דף כשיש כמה URL-ים שמובילים לאותו תוכן
- מונעות בעיות של תוכן כפול (duplicate content)
- חיוני כשיש פרמטרים של חיפוש, מיון, או pagination
מתי צריך canonical¶
<!-- כל אלה צריכים להצביע על אותו canonical -->
<!-- https://store.com/products/laptop -->
<!-- https://store.com/products/laptop?color=silver -->
<!-- https://store.com/products/laptop?ref=homepage -->
<!-- https://www.store.com/products/laptop -->
<!-- http://store.com/products/laptop -->
<link rel="canonical" href="https://store.com/products/laptop" />
דוגמה לדף pagination¶
<!-- דף 1 - הוא הקנוני -->
<link rel="canonical" href="https://blog.com/articles" />
<!-- דף 2 - קנוני של עצמו -->
<link rel="canonical" href="https://blog.com/articles?page=2" />
מידע מובנה עם JSON-LD - Structured Data¶
- מידע מובנה מאפשר למנועי חיפוש להבין בדיוק מה התוכן של הדף
- משתמש בסכמה של Schema.org
- JSON-LD הוא הפורמט המומלץ על ידי Google
- מאפשר הצגת Rich Results בתוצאות החיפוש (כוכבי דירוג, מחיר, מתכון, שעות פתיחה, ועוד)
מבנה בסיסי¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "מדריך React Hooks",
"description": "מדריך מקיף ל-React Hooks למתחילים"
}
</script>
סכמה למאמר - Article¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "מדריך React Hooks למתחילים",
"description": "למדו React Hooks מאפס עם דוגמאות קוד מעשיות",
"image": "https://devacademy.co.il/images/react-hooks-guide.jpg",
"datePublished": "2026-03-01T10:00:00Z",
"dateModified": "2026-03-05T14:30:00Z",
"author": {
"@type": "Person",
"name": "דנה כהן",
"url": "https://devacademy.co.il/authors/dana"
},
"publisher": {
"@type": "Organization",
"name": "DevAcademy",
"logo": {
"@type": "ImageObject",
"url": "https://devacademy.co.il/logo.png"
}
}
}
</script>
סכמה למוצר - Product¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "אוזניות Sony WH-1000XM5",
"image": "https://store.com/images/sony-xm5.jpg",
"description": "אוזניות אלחוטיות עם ביטול רעשים מתקדם",
"brand": {
"@type": "Brand",
"name": "Sony"
},
"offers": {
"@type": "Offer",
"url": "https://store.com/products/sony-xm5",
"priceCurrency": "ILS",
"price": "1299",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "234"
}
}
</script>
סכמה לשאלות נפוצות - FAQ¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "מה זה React Hooks?",
"acceptedAnswer": {
"@type": "Answer",
"text": "React Hooks הם פונקציות שמאפשרות שימוש ב-state ו-lifecycle בקומפוננטות פונקציונליות."
}
},
{
"@type": "Question",
"name": "מתי להשתמש ב-useEffect?",
"acceptedAnswer": {
"@type": "Answer",
"text": "useEffect משמש לביצוע side effects כמו קריאות API, מנויים, ושינוי ה-DOM."
}
}
]
}
</script>
סכמה לארגון - Organization¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "DevAcademy",
"url": "https://devacademy.co.il",
"logo": "https://devacademy.co.il/logo.png",
"sameAs": [
"https://twitter.com/devacademy",
"https://github.com/devacademy",
"https://linkedin.com/company/devacademy"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+972-3-1234567",
"contactType": "customer service",
"availableLanguage": ["Hebrew", "English"]
}
}
</script>
סכמה לנתיב ניווט - BreadcrumbList¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "דף הבית",
"item": "https://devacademy.co.il"
},
{
"@type": "ListItem",
"position": 2,
"name": "בלוג",
"item": "https://devacademy.co.il/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "מדריך React Hooks",
"item": "https://devacademy.co.il/blog/react-hooks-guide"
}
]
}
</script>
ממשק Metadata של Next.js - Next.js Metadata API¶
Next.js App Router מספק API מובנה לניהול מטא-דאטה בצורה פשוטה ויעילה.
מטא-דאטה סטטית¶
// app/about/page.tsx
import { Metadata } from 'next';
export const metadata: Metadata = {
title: 'אודות | DevAcademy',
description: 'למדו על DevAcademy - פלטפורמת לימוד פיתוח ווב בעברית',
keywords: ['פיתוח ווב', 'קורסים', 'React', 'Next.js'],
authors: [{ name: 'DevAcademy' }],
openGraph: {
title: 'אודות DevAcademy',
description: 'פלטפורמת לימוד פיתוח ווב בעברית',
url: 'https://devacademy.co.il/about',
siteName: 'DevAcademy',
images: [
{
url: 'https://devacademy.co.il/og/about.jpg',
width: 1200,
height: 630,
alt: 'אודות DevAcademy',
},
],
locale: 'he_IL',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'אודות DevAcademy',
description: 'פלטפורמת לימוד פיתוח ווב בעברית',
images: ['https://devacademy.co.il/og/about.jpg'],
},
alternates: {
canonical: 'https://devacademy.co.il/about',
},
robots: {
index: true,
follow: true,
},
};
מטא-דאטה דינמית¶
// app/blog/[slug]/page.tsx
import { Metadata } from 'next';
interface BlogPost {
title: string;
excerpt: string;
coverImage: string;
author: string;
publishedAt: string;
slug: string;
}
async function getPost(slug: string): Promise<BlogPost> {
const res = await fetch(`https://api.devacademy.co.il/posts/${slug}`);
return res.json();
}
export async function generateMetadata({
params,
}: {
params: { slug: string };
}): Promise<Metadata> {
const post = await getPost(params.slug);
return {
title: `${post.title} | DevAcademy Blog`,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
type: 'article',
publishedTime: post.publishedAt,
authors: [post.author],
images: [
{
url: post.coverImage,
width: 1200,
height: 630,
alt: post.title,
},
],
},
twitter: {
card: 'summary_large_image',
title: post.title,
description: post.excerpt,
images: [post.coverImage],
},
alternates: {
canonical: `https://devacademy.co.il/blog/${post.slug}`,
},
};
}
export default async function BlogPostPage({
params,
}: {
params: { slug: string };
}) {
const post = await getPost(params.slug);
return (
<article>
<h1>{post.title}</h1>
<p>{post.excerpt}</p>
</article>
);
}
מטא-דאטה ב-layout עם תבנית¶
// app/layout.tsx
import { Metadata } from 'next';
export const metadata: Metadata = {
metadataBase: new URL('https://devacademy.co.il'),
title: {
default: 'DevAcademy - לימוד פיתוח ווב',
template: '%s | DevAcademy',
},
description: 'פלטפורמת לימוד פיתוח ווב בעברית',
openGraph: {
siteName: 'DevAcademy',
locale: 'he_IL',
type: 'website',
},
robots: {
index: true,
follow: true,
},
verification: {
google: 'google-site-verification-code',
},
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="he" dir="rtl">
<body>{children}</body>
</html>
);
}
- כשדף ילד מגדיר
title: 'אודות', התוצאה תהיה "אודות | DevAcademy" (הודות ל-template)
הוספת JSON-LD ב-Next.js¶
// app/blog/[slug]/page.tsx
export default async function BlogPostPage({
params,
}: {
params: { slug: string };
}) {
const post = await getPost(params.slug);
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Article',
headline: post.title,
description: post.excerpt,
image: post.coverImage,
datePublished: post.publishedAt,
author: {
'@type': 'Person',
name: post.author,
},
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<article>
<h1>{post.title}</h1>
<p>{post.excerpt}</p>
</article>
</>
);
}
בדיקת מטא-תגיות ומידע מובנה¶
כלים לבדיקה¶
- Google Rich Results Test - בדיקת structured data
- Facebook Sharing Debugger - בדיקת Open Graph
- Twitter Card Validator - בדיקת Twitter Cards
- Schema Markup Validator - בדיקה מול Schema.org
# בדיקת structured data מ-CLI
npx structured-data-testing-tool --url https://devacademy.co.il/blog/react-hooks
בדיקה ב-DevTools¶
- פתחו את ה-DevTools ועברו לכרטיסיית Elements
- חפשו בתוך ה-
<head>את כל תגיות ה-meta - וודאו שכל דף מכיל: title, description, og:title, og:description, og:image, canonical
סיכום¶
- מטא-תגיות הן אלמנטים ב-
<head>שמספקים מידע למנועי חיפוש ולדפדפנים - התגיות החיוניות: title, description, viewport, charset, robots
- פרוטוקול Open Graph שולט בהצגת קישורים ברשתות חברתיות
- Twitter Cards מאפשרים שליטה בהצגת תוכן בטוויטר
- כתובות קנוניות מונעות בעיות של תוכן כפול
- מידע מובנה (JSON-LD) מאפשר Rich Results בתוצאות החיפוש
- סוגי סכמות נפוצים: Article, Product, FAQ, Organization, BreadcrumbList
- Next.js Metadata API מפשט את ניהול המטא-דאטה באפליקציה