22
ژانویه

رفع مشکل عدم نمایش Brand و gtin‌ محصولات در سرچ کنسول گوگل بدون استفاده از پلاگین

رفع مشکل عدم نمایش Brand و gtin‌ محصولات در سرچ کنسول گوگل به سئو بهتر مخصولات کمک زیادی میکند. بی مقدمه بریم سراغ اصل مطلب، اگر در سرچ کنسول گوگل به خطاهای زیر برخوردید:

Missing field “brand” (optional)

No global identifier (e.g. , gtin, mpn, isbn) (optional)

و یا اگر از گوگل مرچنت سنتر (Google Merchant Center) برای ارائه و تبلیغ محصولات خود استفاده میکنید ممکن است برخی از محصولات شما به دلیل دارا نبودن Brand و کد بین المللی (مثلا Gtin)، disapprove بشه وبه مشکل بر بخورید.

اگر نمیدونید کد gtin چیه، به تصویر زیر توجه کنید. عدد نوشته شده زیر بارکد مربوط به این کد می باشد:

نمایش بارکد مربوط به کد gtin
نمایش بارکد مربوط به کد gtin

برای رفع تمام این مشکلات باید چند مرحله زیر را به ترتیب انجام دهید:

    1.  فیلدی در قسمت مشخصات محصولات ووکامرس قرار بدهید تا مقدار brand و gtin را بتوانید وارد کنید
    2.  ووکامرس باید بتواند بعد از دریافت این دو مقدار، آن ها را در دیتا بیس ذخیره کند
    3.  این دو مقدار را به استراکچر دیتاهای قالب خود اضافه کنید
    4.  در صورت نیاز این دو مقدار در صفحه محصولات نمایش داده شوند (کاملا اختیاری)

مرحله اول – افزودن دو عدد  input به قسمت انبار ( Inventory) محصولات در ووکامرس:                

برای انجام اینکار باید کد زیر را به فایل فانکشن خود اضافه کنید:

/**
* ————————————————————————————————
* Add Global Trade Identification Numbers (GTINs) &&&& BRAND to WooCommerce products.
* ————————————————————————————————
*/

function woocommerce_render_gtin_field() {

$input1 = array(
‘id’ => ‘_gtin’,
‘label’ => sprintf(
‘<abbr title=”%1$s”>%2$s</abbr>’,
_x( ‘Global Trade Identification Number’, ‘field label’, ”text_domain’ ),
_x( ‘GTIN’, ‘abbreviated field label’, ”text_domain’ )
),
‘value’ => get_post_meta( get_the_ID(), ‘_gtin’, true ),
‘desc_tip’ => true,
‘description’ => __( ‘Enter the Global Trade Identification Number (UPC, EAN, ISBN, etc.)’, ”text_domain’ ),
);
$input2 = array(
‘id’ => ‘_brand’,
‘label’ => sprintf(
‘<abbr title=”%1$s”>%2$s</abbr>’,
_x( ‘The product brand’, ‘field label’, ‘text_domain’ ),
_x( ‘brand’, ‘abbreviated field label’, ”text_domain’ )
),
‘value’ => get_post_meta( get_the_ID(), ‘_brand’, true ),
‘desc_tip’ => true,
‘description’ => __( ‘Enter the Product Brand’, ”text_domain’ ),
);
?>
<div id=”gtin_attr” class=”options_group”>
<?php woocommerce_wp_text_input( $input1); ?>
</div>
<div id=”brand_attr” class=”options_group”>
<?php woocommerce_wp_text_input( $input2); ?>
</div>
<?php
}

add_action( ‘woocommerce_product_options_inventory_product_data’, ‘woocommerce_render_gtin_field’ );

 

بعد از اینکه کد های بالا را به آخر فایل فانکشن قالب خودتون اضافه کردید، دو قسمت برای دریافت کد gtin  و brand  به قسمت مشخصه های محصول شما اضافه میشود.

دو فیلد اضافه شده پایینی برای دریافت دو مقدار برند و جیتین
دو فیلد اضافه شده پایینی برای دریافت دو مقدار برند و جیتین

مرحله دوم – ذخیره مقادیر وارد شده مربوط به هر محصول در پست متا ها

کدی که در قسمت قبل وارد کردید تنها برای نمایش مکانی برای وارد کردن این دو مقدار بوده و قادر به ذخیر مقادرهای وارد شده در پست متا های محصول نبوده!

برای اینکه فالب وردپرس شما بتواند بعد از زدن دکمه انتشار / بروزرسانی مقادیر وارد شده توسط کاربر را ذخیر کند، باید در ادامه کد های قبلی، کد های زیر را نیز اضافه کنید:

/**
* Save the product’s GTIN number && BRAND, if provided.
*
* @param int $product_id The ID of the product is saved.
*/

function woocommerce_save_gtin_field( $product_id ) {
if (
! isset( $_POST[‘_gtin’], $_POST[‘woocommerce_meta_nonce’] )
|| ( defined( ‘DOING_AJAX’ ) && DOING_AJAX )
|| ! current_user_can( ‘edit_products’ )
|| ! wp_verify_nonce( $_POST[‘woocommerce_meta_nonce’], ‘woocommerce_save_data’ )
) {
return;
}
$gtin = sanitize_text_field( $_POST[‘_gtin’] );
update_post_meta( $product_id, ‘_gtin’, $gtin );

if (
! isset( $_POST[‘_brand’], $_POST[‘woocommerce_meta_nonce’] )
|| ( defined( ‘DOING_AJAX’ ) && DOING_AJAX )
|| ! current_user_can( ‘edit_products’ )
|| ! wp_verify_nonce( $_POST[‘woocommerce_meta_nonce’], ‘woocommerce_save_data’ )
) {
return;
}
$brand = sanitize_text_field( $_POST[‘_brand’] );
update_post_meta( $product_id, ‘_brand’, $brand );
}
add_action( ‘woocommerce_process_product_meta’,’woocommerce_save_gtin_field’ );

 

اکنون میتوانید مقادیر Gtin و  brand‌ رو وارد کنید و سپس با زدن دکمه انتشار / بروزرسانی در دیتا بیس ذخیره کنید.

حالا اگر این مقادیر را نتونید وارد استراکچر دیتای محصول خود کنید، مشکلتون حل نمیشه و همچنان پابرجا خواهد ماند!!


مرحله سوم – این دو مقدار را به استراکچر دیتاهای قالب خود اضافه کنید – رفع مشکل عدم نمایش Brand و gtin‌

برای اینکه مقادیر وارد شده برای گوگل و موتورهای جستجو قابل فهم باشه باید کد های زیر را در ادامه کدهای قبلی وارد نمایید:

/**
* ————————————————————————————————
* Add Global Trade Identification Numbers (GTINs) to schema code.
* ————————————————————————————————
*/
add_filter( ‘woocommerce_structured_data_product’, ‘custom_set_extra_schema’, 20, 2 );
function custom_set_extra_schema( $schema, $product ) {

$gtin = get_post_meta( $product->get_id(), ‘_gtin’, true );
$brand_name = get_post_meta( $product->get_id(), ‘_brand’, true );

$schema[‘brand’]=array(
‘@type’=>’Brand’,
‘name’=>$brand_name
);
$schema[‘gtin’] = $gtin;

return $schema;
}

اکنون کار شما به پایان رسیده و میتوانید برای هر محصول مقادیر مخصوص خودش را وارد نمایید و بعد از ذخیره سازی دیگر این خطا در سرچ کنسول گوگل دیده نشود!

ولی گاهی وقت ها ممکنه که بخواهید مقادیر این دیتا ها رو هم در بعضی از مکان های قالب نمایش دهید، برای اینکار میتوانید در محل مورد نظر توسط تابع وردپرس زیر، این مقادیر را فراخوانی کنید:

  <?php
get_post_meta(get_the_ID(), '_brand', true);
get_post_meta(get_the_ID(), '_gtin', true)
  ?>

جمع بندی: 

در نهایت اگر هم متوجه کد ها نشدید، کل کد ها رو در ادامه کپی میکنم و میتونید همین ها رو کپی پیست کنید و در انتهای فایل فانکشن خود قرار بدید 😀

با اینکار تغییری در ظاهر سایتتون مشاهده نمیکنید ولی میتوانید وارد صفحه مربوط به تست نتایج ریچ (Rich Result Test)  بشید و لینک صفحه محصول خود را وارد نمایید. اگر همه چیز را درست انجام داده باشید نباید دیگر خطای عدم وجود این دو مقدار رو بگیرید!!

نکته آخر: اگر دیتای دیگری رو خواستید به استراکچر دیتا هاتون اضافه کنید مثل نویسنده، دقیقا همین مراحل رو باید طی کنید ولی باید داخل گوگل سرچ کنید و ببینید که فرمت نمایش اون دیتا باید به چه صورت باشد! چون اگر داخل کد های ما دقت کرده باشید حتما متوجه شدید که در مرحله سوم، زمانی که میخوایم دیتا ها رو وارد ایتراکچر دیتا کنیم فرمت افزودن brand با gtin متفاوت است!

 

 

    /**
    * ------------------------------------------------------------------------------------------------
    * Add Global Trade Identification Numbers (GTINs) &&&&  BRAND to WooCommerce products.
    * ------------------------------------------------------------------------------------------------
    */

    function woocommerce_render_gtin_field() {

    $input1   = array(
    'id'          => '_gtin',
    'label'       => sprintf(
    '<abbr title="%1$s">%2$s</abbr>',
    _x( 'Global Trade Identification Number', 'field label', 'woodmart' ),
    _x( 'GTIN', 'abbreviated field label', 'woodmart' )
    ),
    'value'       => get_post_meta( get_the_ID(), '_gtin', true ),
    'desc_tip'    => true,
    'description' => __( 'Enter the Global Trade Identification Number (UPC, EAN, ISBN, etc.)', 'woodmart' ),
    );
    $input2   = array(
    'id'          => '_brand',
    'label'       => sprintf(
    '<abbr title="%1$s">%2$s</abbr>',
    _x( 'The product brand', 'field label', 'woodmart' ),
    _x( 'brand', 'abbreviated field label', 'woodmart' )
    ),
    'value'       => get_post_meta( get_the_ID(), '_brand', true ),
    'desc_tip'    => true,
    'description' => __( 'Enter the Product Brand', 'woodmart' ),
    );
    ?>
    <div id="gtin_attr" class="options_group">
        <?php woocommerce_wp_text_input( $input1); ?>
    </div>
    <div id="brand_attr" class="options_group">
        <?php woocommerce_wp_text_input( $input2); ?>
    </div>
<?php
}

add_action( 'woocommerce_product_options_inventory_product_data', 'woocommerce_render_gtin_field' );

/**
 * Save the product's GTIN number && BRAND, if provided.
 *
 * @param int $product_id The ID of the product being saved.
 */

function woocommerce_save_gtin_field( $product_id ) {
    if (
        ! isset( $_POST['_gtin'], $_POST['woocommerce_meta_nonce'] )
        || ( defined( 'DOING_AJAX' ) && DOING_AJAX )
        || ! current_user_can( 'edit_products' )
        || ! wp_verify_nonce( $_POST['woocommerce_meta_nonce'], 'woocommerce_save_data' )
    ) {
        return;
    }
    $gtin = sanitize_text_field( $_POST['_gtin'] );
    update_post_meta( $product_id, '_gtin', $gtin );


    if (
        ! isset( $_POST['_brand'], $_POST['woocommerce_meta_nonce'] )
        || ( defined( 'DOING_AJAX' ) && DOING_AJAX )
        || ! current_user_can( 'edit_products' )
        || ! wp_verify_nonce( $_POST['woocommerce_meta_nonce'], 'woocommerce_save_data' )
    ) {
        return;
    }
    $brand = sanitize_text_field( $_POST['_brand'] );
    update_post_meta( $product_id, '_brand', $brand );
}
add_action( 'woocommerce_process_product_meta','woocommerce_save_gtin_field' );


/**
 * Show product's GTIN number in product meta.
 */
// function cw_add_custom_fields()
// {

//     echo '<span class="posted_in">GTIN:'.get_post_meta(get_the_ID(), '_gtin', true).'</span>';
// }
// add_action( 'woocommerce_single_product_summary', 'cw_add_custom_fields', 40 );
// 
/**
 * ------------------------------------------------------------------------------------------------
 * Add Global Trade Identification Numbers (GTINs) to schema code.
 * ------------------------------------------------------------------------------------------------
 */
add_filter( 'woocommerce_structured_data_product', 'custom_set_extra_schema', 20, 2 );
function custom_set_extra_schema( $schema, $product ) {

    $gtin       = get_post_meta( $product->get_id(), '_gtin', true );
    $gtin_length = strlen($gtin);
    $brand_name = get_post_meta( $product->get_id(), '_brand', true );

//     $schema['brand']  = $brand_name;
    $schema['brand']=array(
        '@type'=>'Brand',
        'name'=>$brand_name
    );
//     $schema['gtin'.$gtin_length] = $gtin;
    $schema['gtin'] = $gtin;

    return $schema;
}

داده ساختار یافته چیست؟

اگر به تازگی آموزش سئو را آغاز کرده اید ممکن است مفهوم استراکچردیتا برایتان گنگ باشد. داده های ساختاری (Structure data) یک روش استاندارد برای ارائه اطلاعات در مورد یک صفحه وب است. این به موتورهای جستجو مانند Google کمک می کند تا محتوای شما را بهتر بفهمند.

اما چه فایده ای برای شما دارد و چگونه آن را پیاده سازی می کنید؟

لیست موضوعاتی که در این مطلب به آن پرداختیم:
داده های ساخت یافته چگونه به SEO شما کمک می کنند
نشانه گذاری طرح ، سنگ بنای داده های ساخت یافته
سه روش ساختاردهی داده ها
داده های ساختاری فراتر از وب سایت شما

زبان نشانه گذاری HTML برای این منظور ایجاد شده بود که عناصر مختلف صفحه از قبیل تصویر، پاراگراف، جدول، مقاله، کتاب، فیلم و… را مشخص کند و به مرورگرها بگه که در کدام بخش از صفحه چه چیزی باید نمایش داده شه.
این تگها برای مرورگرها کافی بودن ولی موتورهای جستجو با دشواری‌هایی مواجه بودن، استراکچرد دیتا اینجا ظهور میکنه و این آگاهی رو برای موتورهای جستجو با استانداردهای مختلف ایجاد میکنه.

Structured data به اطلاعاتی میگن که به موتورهای جستجو مانند گوگل کمک میکنه تا دید بهتری نسبت محتوای یک صفحه از سایت داشته باشه.
استانداردهای زیادی برای استراکچرد دیتا ایجاد شده که توسط اونها میتونیم اطلاعاتی در مورد یک فیلم، مقاله، کتاب، دستورالعمل طبخ غذا و موارد متعدد دیگر رو به موتورهای جستجو بدیم.

 

Structured data چگونه به SEO شما کمک می کنند؟
اول از همه، داده های ساختار یافته عامل رتبه بندی نیستند. این به شما کمک نمی کند مستقیماً در Google رتبه بالاتری داشته باشید. با این حال، فواید زیادی دارد. ما بر روی چهار مورد مهم تمرکز خواهیم کرد:
نتایج غنی بگیرید
وارد نمودار دانش Google شوید
جستجوی معنایی را پشتیبانی کنید
از E ‑ A-T خود پشتیبانی کنی
1. ریچ ریزالت (rich results) بگیرید

ریچ ریزالت نتایج جستجوی بهبود یافته بصری با اطلاعاتی هستند که از طریق استراکچر دیتا استخراج شده اند. متداول ترین نوع ریچ ریزالت، قطعه های غنی مانند این موارد است:

Microdata یا میکرودیتا چیست؟

در زبان نشانه گذاری HTML5 به استراکچرد دیتا در واقع Microdata (میکرودیتا) میگن که با استفاده از سه attribute  (اتریبیوت)  itemscope , itemtype , itemprop شما میتونید کد html تون رو برای موتورهای جستجو سئو کنید.

البته تا چند وقت پیش استاندارد Microdata رو گوگل ترجیح میداد که توسط سایت schema.org پیاده شده بود. ولی الان استاندارد JSON-LD رو بیشتر قبول دارن. نمونه‌ای از کدهای HTML5 با رعایت استاندارد Microdata :

<div itemscope itemtype="http://schema.org/Recipe">
  <h1 itemprop="name">Nana's Linguini</h1>
  <img itemprop="photo" src="/blog/linguini.jpg" />
  <p>By <span itemprop="author">Catherine</span>, <span itemprop="published">November 5, 2013</span></p>

رفع مشکل عدم نمایش Brand و gtin‌

منتظر نظرات و سوالاتتون در بخش کامنت ها هستم!!