Google added six optional product attributes to Merchant Center for AI Mode and other conversational search: product FAQs, PDF manuals, related products, a popularity score and two variant fields. Google calls them conversational attributes, and they sit on top of the feed you already send. Most guides assume you edit a feed file by hand, but Google for WooCommerce syncs products through the Merchant API.
The short answer for WooCommerce: the plugin doesn’t send these attributes on its own, and its attribute mapping screen doesn’t offer them. You can add them with a supplemental data source in Merchant Center, which needs no code, or with one filter in the plugin, which keeps everything in WordPress.
Key takeaways
- Google added six optional conversational attributes to Merchant Center for AI Mode and other conversational search. They are question_and_answer, document_link, related_product, popularity_rank, item_group_title and variant_option, and adding them won’t change the approval status of products you already have. arvindkumar.ca
- Google for WooCommerce doesn’t send these attributes by default, and its attribute mapping screen doesn’t offer them. Since version 3.10.0 the woocommerce_gla_product_attribute_values filter accepts Merchant API attribute names, and each variation is sent as its own item with the ID gla_ plus its WooCommerce ID. arvindkumar.ca
- Most stores already have data that fits: product FAQs, cross-sells that really are bought together, manual PDFs, recent sales and variation attributes. Skip item_group_title unless you have changed your variation titles, because the group title must differ from each variant’s title. arvindkumar.ca
- The no-code route is a supplemental data source in Merchant Center, which is the method Google recommends. It only adds attributes to products your primary source already sends, with one row per item using the gla_ ID. arvindkumar.ca
- The code route is a small plugin that hooks into woocommerce_gla_product_attribute_values and returns camelCase Merchant API names. Test it on a staging copy first, and pick one route per attribute, because Google doesn’t say which source wins when both send the same one. arvindkumar.ca
- Canadian stores should consider adding the warranty attribute with the unit in years for Quebec’s Bill 29. If you leave the unit out, Google reads the number as months, so a 4 meant as four years shows as four months. arvindkumar.ca
- Keep out anything time-bound, promotional or already in your feed. Answers must be correct and about the product, and you shouldn’t send FAQs that are already in a PDF listed in document_link. arvindkumar.ca
Summarised from this post, formatted for answer engines.
What are Google’s conversational attributes?
They are optional feed attributes that help AI systems understand a product’s details. Google’s help page says they help shoppers find product information across AI-driven surfaces like AI Mode in Search, and that adding them won’t change the approval status of products you already have. The six are:
question_and_answer: up to 30 question and answer pairs, each part up to 1,000 characters and 10,000 characters in total per product.document_link: up to five public PDF links, such as a manual or assembly instructions, each file up to 50 MB.related_product: up to 30 links to other products, each with a relationship:part_of_set,required_part,often_bought_with,substitute,different_brandoraccessory.popularity_rank: a number from 0 to 100, with one decimal place, for how well the product sells compared with the rest of your catalogue.item_group_title: one title for a group of variants, up to 150 characters.variant_option: the name and value pairs that tell variants apart, such as size and colour.
This is the Google side of the job I covered in Selling through ChatGPT from WooCommerce and UCP on WooCommerce: give the machine the answers your product page already gives a person.
Does Google for WooCommerce send conversational attributes?
Not by default. The attribute mapping screen covers 15 attributes, from brand and GTIN to size and pattern, and none of the six are among them. Version 3.10.0, released on October 20, finished the move to the Merchant API, and its code now accepts Merchant API attribute names through the woocommerce_gla_product_attribute_values filter. The allowed list in the plugin’s source includes questionsAndAnswers, documentLinks, relatedProducts, popularityRank, itemGroupTitle, variantOptions and warranty. Keys outside that list are dropped and logged.
Two details of how the plugin syncs matter for everything below. Each product goes to Merchant Center with the ID gla_ plus its WooCommerce ID, so product 123 is gla_123. And a variable product is never sent as itself: each variation goes as its own item, with the parent’s ID as its item group.
Which WooCommerce data fits each attribute?
Most stores already have some of it, just not in the feed. I’d start here:
- Product FAQs to question_and_answer. WooCommerce has no FAQ field, so this depends on where yours live. Use the questions customers really ask.
- Cross-sells to related_product as often_bought_with. Only if they really are bought together. Upsells are usually better products, which is not the same relationship.
- Manual and spec sheet PDFs to document_link. Googlebot must reach them with no login and no robots.txt block.
- Recent sales to popularity_rank. Google asks for recent sales, such as last month, compared within the same category, so WooCommerce’s lifetime sales count won’t do.
- Variation attributes to variant_option. Size, colour, material.
Skip item_group_title unless you have changed your variation titles. WooCommerce gives a variation its parent’s title by default, and the plugin sends that title for each variation. Google says the group title must differ from each variant’s title, so a group title copied from the parent breaks that rule.
How do I add conversational attributes without code?
Use a supplemental data source, which is the method Google recommends. It only adds attributes to products your primary source already sends: it can’t add or remove products.
- Find the plugin’s data source in Merchant Center under Settings, then Data sources. The plugin names it “Google for WooCommerce” followed by the language and feed label in brackets, for example
(en/CA). Note both values. It worked if you can see that source with your products in it. - Download the conversational attributes template from Google’s help page on these attributes. It worked if you have a file with the attribute names as column headers.
- Fill in one row per item, with the
gla_ID in theidcolumn. For a variable product, use the variation IDs, which WooCommerce shows next to each variation in the product editor. It worked if every ID in your sheet exists in the plugin’s data source. - Open the Supplemental sources tab under Data sources and choose Add supplemental product data. If you don’t see the tab, Google’s help says to turn on Advanced data source management under Settings, then Add-ons. It worked if the setup form opens.
- Choose a file, Google Sheets or the API, enter the same feed label and language as the plugin’s source, and link it to that source. It worked if the new source lists the plugin’s source as its primary.
- Open a product you filled in and check its attributes after processing. It worked if your FAQs and related products show on that product with no new errors in the diagnostics.
In a tab-separated file, pairs are quoted and joined with a colon, related products are written as relationship, ID type and ID, and several values go in one cell separated by commas:
id question_and_answer related_product
gla_123 "Is the lid dishwasher safe?":"Yes. The lid and the filter can go in the top rack.","Does it switch off when empty?":"Yes. It switches off if there is no water in it." often_bought_with:id:gla_456,accessory:id:gla_789
gla_456 "What size filter does it take?":"It takes the 60 mm filter that ships with it."
Inside a value, a double quote is written twice. Google’s page adds that in Google Sheets you escape commas, colons and backslashes with a backslash instead. A supplemental source is also the right home for popularity_rank, because Google suggests updating it there when popularity changes, and a monthly export is easier than code.
How do I send conversational attributes from WooCommerce with code?
Hook into woocommerce_gla_product_attribute_values and return the Merchant API names, which are camelCase and use upper-case values. This small plugin sends FAQs, cross-sells and variant options. It assumes your FAQs are stored in a _product_faqs meta field as a list of question and answer pairs, so change that line to wherever yours live.
<?php
/**
* Plugin Name: Conversational attributes for Google for WooCommerce
* Description: Sends FAQs, cross-sells and variant options to Merchant Center.
*/
add_filter( 'woocommerce_gla_product_attribute_values', 'ak_gla_conversational_attributes', 10, 2 );
function ak_gla_conversational_attributes( $values, $product ) {
$parent = $product->get_parent_id() ? wc_get_product( $product->get_parent_id() ) : $product;
if ( ! $parent ) {
return $values;
}
// FAQs: change this to wherever your store keeps them.
$faqs = get_post_meta( $parent->get_id(), '_product_faqs', true );
$pairs = array();
if ( is_array( $faqs ) ) {
foreach ( $faqs as $faq ) {
if ( empty( $faq['question'] ) || empty( $faq['answer'] ) ) {
continue;
}
$pairs[] = array(
'question' => mb_substr( wp_strip_all_tags( $faq['question'] ), 0, 1000 ),
'answer' => mb_substr( wp_strip_all_tags( $faq['answer'] ), 0, 1000 ),
);
}
}
if ( $pairs ) {
$values['questionsAndAnswers'] = array_slice( $pairs, 0, 30 );
}
// Cross-sells as "often bought with". Variable products are skipped
// because the plugin sends their variations, not the parent.
$related = array();
foreach ( $parent->get_cross_sell_ids() as $id ) {
$cross_sell = wc_get_product( $id );
if ( $cross_sell && ! $cross_sell->is_type( 'variable' ) ) {
$related[] = array(
'relationshipType' => 'OFTEN_BOUGHT_WITH',
'idType' => 'ID',
'id' => 'gla_' . $id,
);
}
}
if ( $related ) {
$values['relatedProducts'] = array_slice( $related, 0, 30 );
}
// Variations: the options that tell them apart.
if ( $product->is_type( 'variation' ) ) {
$options = array();
foreach ( $product->get_attributes() as $taxonomy => $slug ) {
if ( '' === $slug ) {
continue; // An "Any" value has nothing to send.
}
$term = taxonomy_exists( $taxonomy ) ? get_term_by( 'slug', $slug, $taxonomy ) : false;
$options[] = array(
'name' => wc_attribute_label( $taxonomy, $parent ),
'value' => $term ? $term->name : $slug,
);
}
if ( $options ) {
$values['variantOptions'] = $options;
}
}
return $values;
}
Variable cross-sells are skipped because the parent never reaches Merchant Center, so gla_ plus its ID points at nothing. The gla_ prefix is the default, and the plugin lets other code change it through woocommerce_gla_get_google_product_offer_id, so check your IDs in Merchant Center first. An “Any” variation value is skipped, but Google wants every variant in a group to have the same option names, so a product built on “Any” values is a poor fit for variant_option. Keep the FAQs short enough to stay under the 10,000-character total.
- Save the code as a plugin file in
wp-content/plugins/and activate it on a staging copy first. It worked if the site loads with no PHP errors. - Update one product that has FAQs and cross-sells so the plugin syncs it again. It worked if the plugin’s product feed screen shows it as synced.
- Check WooCommerce, then Status, then Logs, for the
google-for-woocommercesource. If debug lines are logged, one saying an attribute override was dropped means a key name is wrong. - Open the product in Merchant Center. It worked if the questions, related products and variant options show and diagnostics report nothing new.
Pick one route for each attribute. Google doesn’t say which source wins when the plugin and a supplemental source both send the same attribute, and I wouldn’t find out on a live catalogue.
What should Canadian stores add for Quebec warranties?
Add the warranty attribute, with the unit in years. It isn’t one of the six, but it fits the same source or filter. Google’s warranty page says it is for products that must show certain information under local rules, naming Quebec’s Bill 29, and that for Bill 29 the warranty period should be given in years.
Watch the default. If you leave the unit out, Google reads the number as months, so a “4” meant as four years shows as four months. In a text file, write the duration and unit as 4:year. In the filter above, add $values['warranty'] = array( 'duration' => '4', 'durationUnit' => 'YEAR' ); for the products that need it.
What shouldn’t go into conversational attributes?
Anything time-bound, promotional or already in your feed. Google’s rules say:
- Answers must be correct and about the product. No prices, dates or keyword stuffing.
- Don’t repeat what is already in the title, description, product highlights or product details.
- Don’t send FAQs that are already in a PDF you list in
document_link, because Google pulls answers from those documents itself. - Related products need all three parts, one relationship per entry, and IDs made only of letters, numbers, underscores and dashes.
To see whether any of this changes how AI answers describe your products, track it the way I set out in Measure your brand’s visibility in AI search, and note the date you added the attributes.
If you do one thing this week, take your ten best-selling products, write down the five questions customers ask most about each, and load them as a supplemental source. It’s a small job, and you’ll know before the holiday rush whether Google picks them up.