התוסף Yoast SEO מוסיף לגרף הסכמה של כל עמוד רכיב מסוג BreadcrumbList. כדי להסיר את סכמת פירורי הלחם (breadcrumbs) ולהשאיר את שאר הגרף, תצטרכו שני פילטרים: הראשון מסיר את הרכיב עצמו, והשני מסיר את ההפניה אליו מתוך WebPage.
הפתרון הזה שימושי כאשר התבנית או תוסף אחר כבר מוסיפים סימון BreadcrumbList ו-Google Search Console מדווח על כפילויות, או כאשר פירורי הלחם לא תואמים למבנה האמיתי של האתר.
אם אתם רוצים לכבות את כל הנתונים המובנים של Yoast, עיינו במדריך ביטול הסכמה של Yoast SEO. כדי לשנות את פירורי הלחם במקום להסיר אותם, ראו הוספת קישור לפירורי הלחם של Yoast SEO.
הקוד
הוסיפו את הסניפט לקובץ functions.php של התבנית שלכם (רצוי בתבנית הבת, כמובן) או לתוסף מותאם אישית:
add_filter( 'wpseo_schema_graph_pieces', 'remove_breadcrumbs_from_schema', 11, 2 );
add_filter( 'wpseo_schema_webpage', 'remove_breadcrumbs_property_from_webpage', 11, 1 );
/**
* Removes the breadcrumb graph pieces from the schema collector.
*
* @param array $pieces The current graph pieces.
* @param string $context The current context.
*
* @return array The remaining graph pieces.
*/
function remove_breadcrumbs_from_schema( $pieces, $context ) {
return array_filter( $pieces, function( $piece ) {
return ! $piece instanceof \Yoast\WP\SEO\Generators\Schema\Breadcrumb;
} );
}
/**
* Removes the breadcrumb property from the WebPage piece.
*
* @param array $data The WebPage's properties.
*
* @return array The modified WebPage properties.
*/
function remove_breadcrumbs_property_from_webpage( $data ) {
if ( array_key_exists( 'breadcrumb', $data ) ) {
unset( $data['breadcrumb'] );
}
return $data;
}
כיצד זה עובד
הפילטר wpseo_schema_graph_pieces מקבל את רשימת אובייקטי ה-generator ש-Yoast יריץ עבור העמוד הנוכחי. הפונקציה הראשונה מסננת את האובייקט שה-class שלו הוא Yoast\WP\SEO\Generators\Schema\Breadcrumb, כך שה-BreadcrumbList לא נבנה כלל.
רכיב ה-WebPage עדיין מכיל מאפיין breadcrumb שמפנה אל #breadcrumb באמצעות @id. הפילטר wpseo_schema_webpage מאפשר לכם לערוך את אותו רכיב, והפונקציה השנייה מוחקת את המאפיין כדי שלא תישאר בגרף הפניה לרכיב שכבר לא קיים.
הקוד חל על כל עמודי האתר. השתמשו בשני הפילטרים יחד: שימוש רק באחד מהם ישאיר BreadcrumbList כפול או הפניה שבורה.
למה הסניפט לא עבד?
הסיבה הנפוצה ביותר היא שם class שאיבד את ה-backslashes שלו בזמן העתקה או שמירה (YoastWPSEOGeneratorsSchemaBreadcrumb). PHP לא זורק שגיאה כאשר instanceof בודק מול class שאינו קיים. הוא פשוט מחזיר false, ולכן לא מוסר דבר. העתיקו שוב את הקוד מהקטע שלמעלה.
אם אתם מדביקים את הסניפט באמצעות כלי שמסיר backslashes, השתמשו בגרסה הקצרה הבאה. היא מסירה את אותו סימון באמצעות הפילטר wpseo_schema_needs_breadcrumb, ואין בה שם class כלל:
add_filter( 'wpseo_schema_needs_breadcrumb', '__return_false' );
add_filter( 'wpseo_schema_webpage', function( $data ) {
unset( $data['breadcrumb'] );
return $data;
} );
עדיין רואים את הסימון? נקו את ה-cache של העמודים, פתחו את קוד המקור של העמוד וחפשו BreadcrumbList. אם התוצאה לא נמצאת בתוך הסקריפט yoast-schema-graph, סביר שתוסף אחר או התבנית שלכם הם אלה שמוסיפים אותו.
סכמה מול פירורי לחם גלויים
הסניפט הזה מסיר רק את הנתונים המובנים. פירורי הלחם שהגולשים רואים הם פלט נפרד, והם נשארים במקומם.
זה עובד גם בכיוון ההפוך. כיבוי ההגדרה Enable breadcrumbs for your theme תחת ״Yoast SEO > Settings > Advanced > Breadcrumbs״ לא מסיר את סכמת ה-BreadcrumbList, מכיוון ש-Yoast בונה את הרכיב הזה ללא קשר להגדרה.
כדי להסתיר את פירורי הלחם הגלויים, הסירו מהתבניות את הקריאה ל-yoast_breadcrumb(), את השורטקוד סאבי / סניפטים / עמוד 5 או את בלוק פירורי הלחם.
לדרכים נוספות להצגת פירורי לחם (כולל ללא תוסף), קראו את הפוסט כיצד להוסיף פירורי לחם לאתר וורדפרס. הסניפט המקורי לקוח מתיעוד ה-Schema API של Yoast.
שאלות נפוצות
הנה כמה שאלות נפוצות על הסרת סכמת פירורי הלחם ב-Yoast:
האם הסרת הסכמה של פירורי הלחם תפגע ב-SEO?
גוגל משתמש בסימון של פירורי הלחם בכדי להבין היכן העמוד ממוקם במבנה האתר, אז אל תסירו אותו ללא סיבה. עשו זאת כאשר משהו אחר כבר מוסיף סימון BreadcrumbList תקין, או כאשר פירורי הלחם של Yoast שגויים ואין לכם דרך לתקן אותם.
האם אפשר להסיר את סכמת פירורי הלחם רק בעמודים מסוימים?
כן. הוסיפו התניה כמו is_front_page() או is_singular( 'product' ) לשתי הפונקציות, והחזירו את הערך המקורי כאשר התנאי לא מתקיים. הקפידו ששתי ההתניות יהיו זהות.
מהו הפילטר wpseo_schema_webpage?
זהו אחד מפילטרי ה-wpseo_schema_<identifier> של Yoast. הוא מקבל את חלק ה-WebPage כמערך לפני ההדפסה, כך שתוכלו להוסיף, לשנות או להסיר מאפיינים כמו breadcrumb.
האם זה מסתיר גם את פירורי הלחם המוצגים בעמודים?
לא. הסניפט מסיר רק את ה-JSON-LD. פירורי הלחם הגלויים מגיעים מ-yoast_breadcrumb(), מהשורטקוד או מהבלוק בתבנית שלכם, ושם עליכם להסיר אותם.