skills/marketing-growth/content-commerce/SKILL.md
Turn your blog into a sales channel by embedding shoppable product cards in editorial content and tracking content-influenced revenue
npx skillsauth add finsilabs/awesome-ecommerce-skills content-commerceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Content commerce bridges editorial content — blog posts, buying guides, lookbooks — with direct product purchasing, capturing high-intent organic traffic and shortening the path from discovery to purchase. Shopify and WooCommerce both have built-in blog functionality where you can link products directly; headless setups require a CMS integration. The key goal is making it easy for your editorial team to embed products without engineering help, and tracking which content pieces actually drive revenue.
| Platform | Content Tool | Shoppable Embedding Approach | |----------|-------------|------------------------------| | Shopify | Shopify Blog (built-in) | Use Shogun or PageFly page builder to embed product cards; or use Shopify's native blog with manual product links | | WooCommerce | WordPress native blog | Use WooCommerce product blocks (Gutenberg) or WooCommerce Shortcodes to embed products inline | | BigCommerce | BigCommerce Blog or WordPress | WordPress: use WooCommerce Shortcodes or a product block plugin; BigCommerce blog: manual product linking only | | Headless / Custom CMS | Contentful, Sanity, Prismic | Build a product embed component using the CMS's custom content type system and Storefront API |
Option A: Shopify Blog with native product links (free, simple)
/products/product-handle)Option B: Shogun or PageFly (recommended for buying guides)
Option C: Instant (previously known as EcomSend) — for in-blog product embeds
Using Gutenberg product blocks (built-in with WooCommerce):
Using WooCommerce Shortcodes (classic editor):
Insert a product anywhere in article text:
[product id="123"]
[products ids="123,456,789" columns="3"]
[product_page id="123"]
blog.yourstore.com) with the BigCommerce for WordPress pluginFor headless setups with Contentful, Sanity, or Prismic, build a product embed content type:
Sanity schema for a product embed:
// schemas/productEmbed.ts
export const productEmbedType = {
name: 'productEmbed',
title: 'Product Embed',
type: 'object',
fields: [
{
name: 'productId',
title: 'Product ID',
type: 'string',
description: 'Shopify/BigCommerce product ID or handle',
},
{
name: 'displayStyle',
title: 'Display Style',
type: 'string',
options: { list: ['card', 'inline', 'full'] },
initialValue: 'card',
},
{
name: 'ctaText',
title: 'CTA Text',
type: 'string',
initialValue: 'Shop Now',
},
],
};
React component that fetches live price and inventory from the Storefront API:
export function ProductEmbed({ productId, displayStyle, ctaText, articleSlug }: ProductEmbedProps) {
const [product, setProduct] = useState<Product | null>(null);
useEffect(() => {
fetch(`/api/products/${productId}?fields=name,price,images,slug,inStock`)
.then(r => r.json())
.then(setProduct);
}, [productId]);
if (!product) return <div className="product-embed-skeleton" />;
return (
<div className={`product-embed product-embed--${displayStyle}`}>
<img src={product.images[0]?.url} alt={product.name} />
<div className="product-embed__info">
<h3>{product.name}</h3>
<p>${(product.priceInCents / 100).toFixed(2)}</p>
{!product.inStock && <span>Out of stock</span>}
</div>
<a href={`/products/${product.slug}?utm_source=content&utm_campaign=${articleSlug}`}>
{ctaText}
</a>
</div>
);
}
Append UTM parameters to every product link within content so you can track which articles drive revenue in Google Analytics:
?utm_source=content&utm_medium=blog&utm_campaign=ARTICLE-SLUG to product URLs manually or via a theme settingIn Google Analytics 4:
Session source = content to see all orders attributed to blog contentutm_medium = blogIn Shopify Analytics:
utm_content = product slug — this lets you see which specific product in an article drove the conversion, not just which article| Problem | Solution | |---------|----------| | Product prices in articles are stale | Always fetch prices from the storefront API at render time; never embed prices as static CMS content | | Out-of-stock products remain embedded in live articles | Add an inventory check in your product embed component; show "notify me" or a related product instead | | CMS editors can't find products to embed | Use Shogun/PageFly's product search widget; for headless, build a product picker that queries the Storefront API | | Content attribution double-counts — same order attributed to both content and email | In GA4, use last non-direct click as the attribution model, or manually review multi-touch paths in the Path Exploration report | | Buying guide SEO titles not ranking | Ensure article titles match the exact query format ("Best [Product Type] for [Use Case] in [Year]") and include product schema.org markup |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion