Google Merchant Centerのフィードエラーの多くは、構造化データの不備が原因です。正しいJSON-LDの書き方をプラットフォーム別に解説します。

前提条件

実装手順

Step 1: Product + Offer + AggregateRatingの基本構造を理解する

やること: JSON-LDの3大型(Product, Offer, AggregateRating)の関係を理解します。 基本構造:
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "オーガニックコットンTシャツ",
  "image": "https://example.com/tshirt.jpg",
  "description": "100%オーガニックコットン使用。肌触りが良く、通気性に優れたTシャツ。",
  "brand": {
    "@type": "Brand",
    "name": "ブランド名"
  },
  "offers": {
    "@type": "Offer",
    "price": "3980",
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/products/organic-tshirt"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "128"
  }
}
Merchant Centerとの関係: このJSON-LDが商品ページに埋め込まれていると、Merchant CenterのCrawler(Googlebot)が自動で商品情報を取得し、Google Shopping/無料リスティングに反映します。

---

Step 2: 必須プロパティ(name, image, offers.price, offers.availability)を設定する

やること: Merchant Centerがエラーなく受理するために必須の4プロパティを確認します。 必須プロパティ一覧: | プロパティ | 型 | 例 | 未設定時のエラー | |-----------|---|---|----------------| | name | Text | "オーガニックコットンTシャツ" | 「title が見つかりません」 | | image | URL | "https://example.com/tshirt.jpg" | 「画像が見つかりません」 | | offers.price | Number | "3980" | 「価格が見つかりません」 | | offers.priceCurrency | Text | "JPY" | 「通貨が見つかりません」 | | offers.availability | URL | "https://schema.org/InStock" | 「在庫状況が不明」 | availability の値:

---

Step 3: プラットフォーム別の実装方法

Shopify(Liquid): Shopifyの標準テーマ(Dawn等)はProduct JSON-LDを自動出力します。カスタマイズする場合は theme.liquid または product.liquid 内に追加。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "{{ product.title | escape }}",
  "image": "{{ product.featured_image | img_url: 'grande' }}",
  "offers": {
    "@type": "Offer",
    "price": "{{ product.price | money_without_currency }}",
    "priceCurrency": "JPY",
    "availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
  }
}
</script>
WordPress(PHP): functions.php または専用プラグイン(Yoast SEO, Rank Math)で出力。手動実装の場合:
function add_product_jsonld() {
  if (is_product()) {
    global $product;
    $schema = [
      '@context' => 'https://schema.org',
      '@type' => 'Product',
      'name' => $product->get_name(),
      'image' => wp_get_attachment_url($product->get_image_id()),
      'offers' => [
        '@type' => 'Offer',
        'price' => $product->get_price(),
        'priceCurrency' => 'JPY',
        'availability' => $product->is_in_stock()
          ? 'https://schema.org/InStock'
          : 'https://schema.org/OutOfStock'
      ]
    ];
    echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
  }
}
add_action('wp_head', 'add_product_jsonld');
BASE / STORES: カスタムJSON-LDの追加手段がないため、標準の自動出力に依存。不足がある場合はプラットフォーム移行を検討。

---

Step 4: Google Rich Results Testでバリデーションする

やること: 実装したJSON-LDが正しく認識されるかを検証します。 手順: - 「Product」が検出されているか - 警告(Warning)やエラー(Error)がないか - price, availability, image が正しく表示されているか よくあるエラーと対処: | エラー | 原因 | 対処 | |-------|------|------| | 「offers.price が見つかりません」 | priceプロパティの欠落 or 値が空 | offers内にpriceを追加 | | 「画像のURLが無効」 | 相対パスで指定している | https:// から始まる絶対URLに変更 | | 「availabilityの値が不正」 | InStock と書いている | https://schema.org/InStock (フルURL)に修正 |

---

Step 5: Merchant Centerの診断レポートでエラーを確認する

やること: Merchant Center管理画面で構造化データ起因のエラーを確認・修正します。 手順: 重大度別の対応:

---

Step 6: 送料・返品ポリシーの構造化データを追加する

やること: ShippingDetailsMerchantReturnPolicy を追加し、Google Shopping検索結果に「送料無料」「返品可」のバッジを表示させます。 コード例:
{
  "@type": "Offer",
  "price": "3980",
  "priceCurrency": "JPY",
  "shippingDetails": {
    "@type": "OfferShippingDetails",
    "shippingRate": {
      "@type": "MonetaryAmount",
      "value": "0",
      "currency": "JPY"
    },
    "deliveryTime": {
      "@type": "ShippingDeliveryTime",
      "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" },
      "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "d" }
    },
    "shippingDestination": {
      "@type": "DefinedRegion",
      "addressCountry": "JP"
    }
  },
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 14
  }
}
効果: 送料・返品ポリシーがリッチリザルトに表示されるとCTRが15〜25%向上するとされています。

---

まとめ

6ステップの手順を順番に実行することで、Google Merchant Centerのエラーを解消し、Google Shopping/無料リスティングでの露出を最大化できます。

まず今日やるべきこと: Step 4のRich Results Testで現状をチェック。エラーがあればStep 2の必須プロパティから修正。

自社サイトの構造化データを確認するには、Pulse DigitalのChrome拡張で診断してみてください。Product/Offer/BreadcrumbList等の有無と正確性をワンクリックで検出できます。