product-categorization について
Shopify、WooCommerce、BigCommerce、独自プラットフォームの標準機能を使い、EC商品カタログの分類を設計するスキルです。ナビゲーション、SEO、一括分類、よくある問題への対応を扱います。
主な機能
- 01階層の深さとタグの設計
- 02各プラットフォーム標準の分類設定
- 03カテゴリーページのSEOとパンくず改善
- 04大規模カタログの商品一括分類
- 05パス変更とよくある問題への対応
活用シーン
- 01移動しやすい商品カテゴリー階層の構築
- 02フラットな商品一覧の分類体系への移行
- 03パンくずやカテゴリーページSEOの修正
- 04大規模な仕入れ先カタログの一括分類
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill product-categorizationインストール後、Claude Code で/product-categorizationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/breadcrumb-query-and-category-move-trans/criteria.jsontask.mdevals/category-data-model-with-materialized-pa/criteria.jsontask.mdevals/seo-meta-tags-and-ai-auto-categorization/criteria.jsontask.md詳細
商品カテゴリ分類
概要
適切に構成された商品分類体系により、商品を見つけやすくなり、カテゴリページを通じて SEO の効果も高まります。カテゴリ分類の方法はプラットフォームごとに異なります。Shopify ではコレクションとタグ、WooCommerce では階層型のカテゴリとタグ、BigCommerce ではサブカテゴリを含むカテゴリを使用します。カスタムの分類体系を構築するよりも、プラットフォーム本来の仕組みを理解し、正しく設定するほうが効果的です。
このスキルを使用する場面
- ナビゲーション可能なカテゴリツリー(clothing > women > dresses)が必要な商品カタログを構築する場合
- フラットな商品リストを構造化された分類体系に移行する場合
- パンくずリストのナビゲーションが表示されない、または誤ったパスが生成される場合
- SEO に最適化された URL とメタタグが必要なカテゴリページを作成する場合
- 自動分類が必要な大規模なサプライヤーカタログを取り込む場合
基本的な手順
ステップ 1:プラットフォームのカテゴリの仕組みを理解する
| プラットフォーム | カテゴリモデル | URL 構造 |
|---|---|---|
| Shopify | コレクション(テーマを介してフラットまたはネスト可能)。追加の絞り込みにはタグを使用 | /collections/womens-dresses |
| WooCommerce | 階層型カテゴリ(親/子)+タグ | /product-category/clothing/womens/dresses/ |
| BigCommerce | ネストされたカテゴリ(深さの制限なし) | /clothing/womens/dresses/ |
| カスタム/ヘッドレス | パンくずリストのクエリを効率化するためにマテリアライズドパスを使用して構築 | /c/clothing/women/dresses |
構築を始める前に、階層の深さを決めます。
- 2~3 階層がほとんどのストアに最適です(例:Clothing → Womens → Dresses)
- 最大 4 階層にします。これより深い階層は買い物客を混乱させ、SEO の効果を薄めます
- フラットな分類+タグは、小規模なカタログ(商品 200 点未満)に適しています
ステップ 2:プラットフォーム別の設定
Shopify
Shopify では、主なカテゴリ分類の仕組みとしてコレクションを使用します。コレクションには、手動(手作業で選定)と自動(ルールベース)があります。
コレクション階層の作成:
- Admin → Products → Collections → Create collection に移動します
- 「Women's Dresses」の例:
- 親コレクション「Clothing」を作成します(手動。ナビゲーションメニュー用)
- 子コレクション「Women's Dresses」を作成します(自動。ルール:タグに
womens-dressを含む)
- コレクションの SEO フィールドであるタイトル、メタディスクリプション、URL ハンドルを設定します
- コレクション画像と説明を追加します。コレクションページの SEO とコンバージョンの改善につながります
自動コレクション(ルールベース。推奨):
- 「商品タイプが Dress と一致」かつ「タグに womens を含む」のようなルールを設定します
- ルールに一致する商品は自動的に追加されるため、手動で選定する必要はありません
- すべての商品を手動で割り当てられない大規模なカタログに最適です
手動コレクション:
- 選定して編集するコレクション(例:「Summer Picks」「Staff Favorites」)に最適です
- コレクションの編集ページから商品を手動で追加します
ナビゲーションメニューの階層:
- Online Store → Navigation に移動します
- メインメニューを開きます
- 各コレクションをメニュー項目として追加し、サブ項目を親項目の下にドラッグしてネストします
- Shopify のコレクションは技術的にはフラットですが、これによりストアフロントのナビゲーションに視覚的な階層が作成されます
追加の絞り込みに使うタグ:
color-red、size-M、material-cottonのような商品タグを追加します- ファセットフィルタリングアプリ(Boost Commerce、Searchpie)を使用して、タグをコレクションページで絞り込み可能な属性に変換します
パンくずリスト: ほとんどの Shopify テーマには、パンくずリストが標準で含まれています。含まれていない場合:
- Online Store → Themes → Customize に移動します
- テーマ設定で「breadcrumb」を検索します。多くのテーマには切り替えオプションがあります
- Dawn/Debut の場合:パンくずリストはテーマ固有の機能であり、liquid コードの変更が必要な場合があります
WooCommerce
WooCommerceには階層型の商品カテゴリーがあり、従来のカテゴリー階層に最も近い構造です。
カテゴリー階層を作成する:
- Products → Categories → Add New Category に移動します
- 最上位のカテゴリー「Clothing」を作成します
- 子カテゴリー「Women's」を作成し、「Clothing」を親カテゴリーとして選択します
- 孫カテゴリー「Dresses」を作成し、「Women's」を親カテゴリーとして選択します
WooCommerceはSEOに適したURLを自動的に生成します:
- Clothing:
/product-category/clothing/ - Women's:
/product-category/clothing/womens/ - Dresses:
/product-category/clothing/womens/dresses/
商品をカテゴリーに割り当てる:
- 商品を開き、サイドバーの Product Categories ウィジェットに移動します
- 該当するすべてのカテゴリーにチェックを入れます(商品は複数のカテゴリーに属することができます)
- パンくずリストの表示に使用する Primary category にチェックを入れます(Yoast SEOが必要です)
カテゴリーのページSEO:
- カテゴリーを編集します:Products → Categories → [Category] → Edit
- Description を設定します(一意のテキストが商品一覧の上に表示されます。SEOにとって重要です)
- Thumbnail 画像をアップロードします
- Yoast SEO を使用している場合:カテゴリー編集ページのYoastセクションまでスクロールし、各カテゴリーの SEO title と Meta description を設定します
パンくずリスト:
- Yoast SEO(無料)をインストールすると、パンくずリストのナビゲーションが自動的に追加されます
- または WooCommerce → Settings → Advanced → Breadcrumbs でパンくずリストを有効にします
- 区切り文字とホームラベルを設定します
BigCommerce
BigCommerceには、深さに制限のない入れ子型のカテゴリーシステムがあります。
カテゴリーを作成する:
- Products → Product Categories → Add に移動します
- カテゴリー名、説明、URLを入力します(BigCommerceではURLをカスタマイズできます)
- 入れ子にするには Parent category を選択します
- カテゴリー画像をアップロードします
- 各カテゴリーの SEO Title と Meta description を設定します
商品をカテゴリーに割り当てる:
- 商品を編集します
- Categories で該当するすべてのカテゴリーにチェックを入れます
- BigCommerceでは、商品を複数のカテゴリーに割り当てることができます
カテゴリーの並べ替え順:
- カテゴリーごとに並べ替え順を設定します:手動、価格の昇順/降順、新着順、ベストセラー順
- カテゴリー編集ページの Sort Products By で設定します
パンくずリスト: BigCommerceのテーマには、入れ子になったカテゴリー階層に従うパンくずリストがデフォルトで含まれています。必要に応じて、テーマのStencilファイルでパンくずリストのテンプレートをカスタマイズします。
Custom / Headless
ヘッドレスストアフロントでは、効率的なパンくずリストのクエリにマテリアライズドパスモデルを使用します:
// Category model with materialized path
interface Category {
id: string;
name: string;
slug: string;
parentId: string | null;
path: string; // e.g., "clothing/women/dresses" — ancestor slugs joined by /
pathIds: string[]; // IDs for fast joins: ['cat_root', 'cat_clothing', 'cat_women', 'cat_dresses']
depth: number;
position: number; // Sort order among siblings
published: boolean;
seoTitle?: string;
seoDescription?: string;
}
// Get breadcrumbs in one query using materialized path
export async function getCategoryWithBreadcrumb(slug: string) {
const category = await db.categories.findUnique({ where: { slug } });
if (!category) return null;
// Fetch all ancestors in one query using pathIds
const ancestors = await db.categories.findMany({
where: { id: { in: category.pathIds.slice(0, -1) } },
orderBy: { depth: 'asc' },
});
return {
...category,
breadcrumbs: [
...ancestors.map(a => ({ name: a.name, url: `/c/${a.path}` })),
{ name: category.name, url: `/c/${category.path}` },
],
};
}
// Update materialized paths when a category is moved
export async function moveCategory(categoryId: string, newParentId: string | null) {
const category = await db.categories.findUnique({ where: { id: categoryId } });
const newParent = newParentId ? await db.categories.findUnique({ where: { id: newParentId } }) : null;
const newPath = newParent ? `${newParent.path}/${category.slug}` : category.slug;
const newPathIds = newParent ? [...newParent.pathIds, categoryId] : [categoryId];
// Update this category and all descendants in a transaction
const descendants = await db.categories.findMany({ where: { path: { startsWith: category.path + '/' } } });
await db.$transaction([
db.categories.update({
where: { id: categoryId },
data: { parentId: newParentId, path: newPath, pathIds: newPathIds, depth: newPath.split('/').length },
}),
...descendants.map(desc => db.categories.update({
where: { id: desc.id },
data: {
path: desc.path.replace(category.path, newPath),
pathIds: [...newPathIds, ...desc.pathIds.slice(category.pathIds.length)],
depth: desc.path.replace(category.path, newPath).split('/').length,
},
})),
]);
}
Step 3: カテゴリーページをSEO向けに最適化する
プラットフォームにかかわらず、すべてのカテゴリーページに以下が必要です:
- 固有の説明文:このカテゴリーに何が含まれるかを説明する、100~200語のオリジナルテキスト。「Shop women's dresses」だけでは不十分です。スタイル、素材、用途について説明します。
- カテゴリー画像:カテゴリーに関連するヒーロー画像またはバナー画像
- SEOタイトル:形式 —
[Category Name] | [Store Name](例:「Women's Dresses | YourStore」) - メタディスクリプション:品揃えの独自性を強調する150~160文字の説明文
- 正規URL:フィルターパラメーターを含まない、カテゴリーのクリーンなURL(例:
/clothing/womens/dresses。/clothing/womens/dresses?color=redではありません)
フィルター適用ページの正規URL:
- Shopify:コレクションページではテーマが自動的に処理します
- WooCommerce + Yoast SEO:Yoastが正規URLを自動的に設定します
- BigCommerce:カテゴリー設定で正規URLを設定します
ステップ 4:大規模なカタログのカテゴリを一括割り当てする
カテゴリ分けする商品が数百点、数千点あるカタログの場合:
Shopify:
- 管理画面 → 商品で、チェックボックスを使って複数の商品を選択します
- 一括操作 → コレクションに追加をクリックして、すべての商品を一度に割り当てます
- 自動コレクションでは、ルールに一致すると商品が自動的に割り当てられます
WooCommerce:
- WP All Importを使って、CSV経由でカテゴリを一括割り当てします
- または、WooCommerce管理画面の「商品を一括編集」を使います
AIを活用したカテゴリ分け(すべてのプラットフォーム):
- 商品名と説明を含む商品カタログをエクスポートします
- AIツールを使って、商品情報に基づくカテゴリを提案してもらいます
- Matrixify(Shopify)またはWP All Import(WooCommerce)を使って、提案されたカテゴリを一括でインポートします
- 公開前に、AIの提案が正確かどうか必ず確認します
ベストプラクティス
- Shopifyでは、メインの分類体系に自動(ルールベース)コレクションを使います — 商品が追加されると自動で更新されます。手動コレクションは、編集者が選定した商品に使います
- 各カテゴリページに固有の説明文を作成します — 説明文のないページは内容が薄く、検索結果で上位表示されることはほとんどありません。オリジナルの文章を100語加えるだけでも、SEOに大きな効果があります
- ほとんどのストアでは階層を3段階までにします — 4段階目の細分化はSEOにほとんど役立たず、ナビゲーションを複雑にします
- 複数カテゴリにまたがる属性(色、素材、用途)には、カテゴリではなくタグを使います — タグを使うと、カテゴリ階層を増やさずに絞り込み機能を実現できます
- カテゴリを移動する際は、パスをトランザクション内で更新します — 一部だけ更新された階層ではパンくずリストが壊れます。カテゴリとその子孫すべてを、常にアトミックに更新してください
よくある落とし穴
| 問題 | 解決策 |
|---|---|
| パンくずリストに誤ったカテゴリが表示される | WooCommerceでは、Yoast SEOをインストールして商品ごとにメインカテゴリを設定します。メインカテゴリが設定されていないと、割り当てられたカテゴリのいずれかがパンくずリストに表示される可能性があります |
| Shopifyのコレクションページに固有のコンテンツがない | 管理画面 → コレクション → [コレクション] → 説明でコレクションの説明を追加します。多くの販売者はここを空欄にしており、SEOの機会を逃しています |
| カテゴリURLと絞り込みURLでコンテンツが重複する | 絞り込みのバリエーションすべてに、クリーンなカテゴリURLを指すcanonicalタグを設定します。2ページ目以降のページネーションページはクロールをブロックします |
| 商品が多すぎるカテゴリに割り当てられている | 各商品にはメインカテゴリを1つ設定し、必要に応じてサブカテゴリを追加します。カテゴリが多すぎるとシグナルが分散し、ナビゲーションがわかりにくくなります |
| カテゴリ名の変更で既存のリンクが壊れる | 名前を変更する際は、古いURLから新しいURLへのURLリダイレクトを設定します。すべてのプラットフォームで、設定からリダイレクトを設定できます |
関連スキル
- @product-data-modeling
- @product-content-enrichment
- @catalog-import-export