Product Page SEO Best Practice

Learn how to map Product Tags V3 and V2.3 API responses to Schema.org standards for enhanced product SEO with structured data implementation.

Product Schema Implementation with Product Tags API

The Product Tags V3 and V2.3 API not only provides AI-driven tags but also delivers structured data specifically designed to enrich your Product Schema. It is built using data retrieved from our Product API.

In this guide, we will outline how to map the API response to Schema.org standards effectively.

  1. Introduce the data provided by our Product API
  2. Explain the mapping logic for Schema.org
  3. Provide a complete JSON-LD example for implementation
📘

Get Our Product API Response to Get Started!

Before we begin, please ensure you have retrieved our Product Tags V3 and Product Tags V2.3 response.


📜 Product API Response Structure

Once we successfully retrieve the API response, the SEO-critical data is available in the result object.

The result object contains a schema property, which provides specific product attributes (like material, audience, and keywords) generated by AI analysis.

📜 Dive Deeper into schema

The schema object within the API result is designed to map directly to Schema.org/Product properties. These elements help search engines understand the specific attributes of your product, such as its material, target audience, and pattern. Crucially, users can modify the literal values within the Tag Management (TGM) system to change the data returned by the API.

Here is the mapping of API fields to Schema properties:

Schema FieldMeaningLiteral Map in TGM
alternateNameGoods/Aliasgoods
audienceUser/Target Audienceuser / audience
colorProduct Colorcolor
manufacturerManufacturermanufacturer / ingredient
materialMaterial/Ingredientsmaterial
modelSerial Numbermodel
brandBrand Namebrand
patternPattern/Designpattern
keywordsRelated Keywordsother literals
descriptionProduct Description

📜 Implementation Guide

To ensure your Product Schema is valid and rich, follow these implementation rules. We will combine data from your Website Database (for static info like Name and Price) and the awoo API (for AI-generated attributes).

🔑 Basic Information

Some fields should come from your database or use the API as a fallback.

  • name: Retrieve from your product name in website
  • description: Use the description string provided by the API
"name": "Your Product Name",
"description": "{{response.result.schema.description}}"

🔑 alternateName

The alternateName field represents product aliases or alternative names. The API returns this as an array of strings. Populate according to the API response object. If there is no data for this field, skip this property entirely.

"alternateName": [
   "{{response.result.schema.alternateName[0]}}", 
   "{{response.result.schema.alternateName[1]}}"
]

🔑 Audience

The audience field requires a specific structure (PeopleAudience). Map the API array items to the audienceType.

"audience": [
  { "@type": "PeopleAudience", "audienceType": "{{response.result.schema.audience[0]}}" },
  { "@type": "PeopleAudience", "audienceType": "{{response.result.schema.audience[1]}}" }
]

🔑 Simple Arrays (Color, Material, Pattern, Model)

For fields like color, material, pattern, and model, the API returns an array of strings. If the API response for a specific field is empty or missing, skip that field entirely.

"color": ["{{response.result.schema.color[0]}}", "{{response.result.schema.color[1]}}"],
"material": ["{{response.result.schema.material[0]}}"],
"pattern": ["{{response.result.schema.pattern[0]}}"],
"model": ["{{response.result.schema.model[0]}}"]

🔑 Complex Objects (Brand, Manufacturer)

The API returns these as arrays of strings, but Schema.org prefers specific types (like Brand or Organization). Take ONLY the first item from the API array to populate the name.

"brand": [
  { "@type": "Brand", "name": "{{response.result.schema.brand[0]}}" }
],
"manufacturer": [
  { "@type": "Organization", "name": "{{response.result.schema.manufacturer[0]}}" }
]

🔑 Keywords

The API returns keywords as an array. For the Schema keywords property, you should join them into a comma-separated string.

"keywords": "{{response.result.schema.keywords.join(', ')}}"

🔑 Standard Product Fields (Required)

The following fields are required by Google or Schema.org standards but are usually specific to your inventory status. Please populate these from your Website Database:

  • image: Array of image URLs
  • offers: Pricing and availability information
"image": ["https://your-image-url.com/1.jpg"],
"offers": {
  "@type": "Offer",
  "url": "https://your-product-url.com",
  "price": "2000",
  "priceCurrency": "JPY",
  "availability": "https://schema.org/InStock"
}

📜 API Response Example

When you make a successful API request, you'll receive a JSON response structured as follows:

{
  "errcode": 0,
  "errmsg": "ACK",
  "requestId": "xxxxxx",
  "result": {
    "tags": [
      {
        "text": "Tops Winter Recommended",
        "link": "...",
        "fullLink": "..."
      }
      // ... more tags
    ],
    "schema": {
      "alternateName": [
        "Blouse",
        "Tops"
      ],
      "brand": [
        "awoo"
      ],
      "color": [
        "White"
      ],
      "keywords": [
        "Elegant",
        "Trendy",
        "Sophisticated",
        "Refined",
        "Business",
        "Versatile",
        "women"
      ],
      "description": "Professional Power Shoulder Blouse is...",
      "name": "Professional Power Shoulder Blouse",
      "price": 2000,
      "priceCurrency": "TWD",
      "availability": "InStock",
      "image": [
        "https://cdn.test-site.com/.../7-1.png?v=1697436962"
      ]
    }
  }
}

📜 Full Implementation Example

Below is a complete JSON-LD example combining all the logic above.

❗️

Implementation Note

In the example below, syntax like {{response...}} represents where you should dynamically insert data. Ensure to add logic to check if the field exists in the API response before rendering the line. If the data is null, do not output that specific property.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  
  // 1. Basic Info (Name from DB, Description from API)
  "name": "Professional Power Shoulder Blouse",
  "description": "{{response.result.schema.description}}",
  
  // 2. Simple Arrays (Map directly if data exists)
  "alternateName": [
     "{{response.result.schema.alternateName[0]}}", 
     "{{response.result.schema.alternateName[1]}}"
  ],
  "color": [
     "{{response.result.schema.color[0]}}"
  ],
  "material": [
     "{{response.result.schema.material[0]}}"
  ],
  "pattern": [
     "{{response.result.schema.pattern[0]}}"
  ],
  "model": [
     "{{response.result.schema.model[0]}}"
  ],

  // 3. Complex Objects (Brand & Manufacturer)
  "brand": [
    { 
      "@type": "Brand", 
      "name": "{{response.result.schema.brand[0]}}" 
    }
  ],
  "manufacturer": [
    { 
      "@type": "Organization", 
      "name": "{{response.result.schema.manufacturer[0]}}" 
    }
  ],

  // 4. Audience (Map to PeopleAudience)
  "audience": [
    { 
      "@type": "PeopleAudience", 
      "audienceType": "{{response.result.schema.audience[0]}}" 
    }
  ],

  // 5. Standard Required Fields (From Website Database)
  "image": [
    "https://cdn.shopify.com/.../7-1.png"
  ],
  "offers": {
    "@type": "Offer",
    "url": "https://yourdomain.com/product/page",
    "price": "2000",
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock"
  },

  // 6. Keywords (Join array to string)
  "keywords": "{{response.result.schema.keywords.join(', ')}}"
}
</script>

👍 Validate Your Schema

After implementation, please strictly refer to the Schema.org Validator or Google's Rich Results Test to verify that your structured data is error-free.


Did this page help you?