HUSKYのSEO URLページにJSON-LDスキーママークアップを追加する方法
問題
HUSKYフィルターの「SEO URLリクエスト」フィールドでは、セキュリティ上の理由から<script>タグが除去され、Googleのリッチリザルト用のJSON-LD構造化データ(スキーママークアップ)を直接挿入できなくなります。
解決策の概要
SEOテキストフィールドに完全なJSON-LDコードを直接挿入する代わりに、HUSKY管理画面でスキーマキーを使用し、実際のJSON-LDコードを別のファイルまたはfunctions.phpに保存します。
方法1:静的なJSONファイル(シンプルなスキーマに推奨)
ステップ1:スキーマファイル用フォルダを作成します
/wp-content/uploads/に移動します- 新しいフォルダを作成します:
json-ld-schemas
ステップ2:JSONスキーマファイルを作成します
category1.json、products.jsonなどのファイルを作成します- 各ファイル内に、純粋なJSON-LDコードを追加します(
<script>タグなし):{ "@context": "https://schema.org", "@type": "CollectionPage", "name": "Product Category", "description": "Category description" }
ステップ3:このコードをfunctions.phpに追加します:
add_action('init', function () {
$url_request = WOOF_EXT::$includes['applications']['url_request'];
remove_filter('woocommerce_after_shop_loop', array($url_request->seo, 'add_seo_text'), 99999);
add_filter('woocommerce_after_shop_loop', function () use ($url_request) {
$rule = $url_request->seo->check_search_rules();
if (!isset($rule['text']) || !$url_request->seo->do_index()) {
return;
}
$schema_key = apply_filters('woof_seo_text', $url_request->seo->replace_vars($rule['text'], $url_request->seo->get_current_replace_vars()));
if (!empty($schema_key)) {
$upload_dir = wp_upload_dir();
$schemas_dir = $upload_dir['basedir'] . '/json-ld-schemas/';
$schema_file = $schemas_dir . $schema_key . '.json';
if (file_exists($schema_file)) {
$json_content = file_get_contents($schema_file);
echo '<div class="woof_seo_text"><script type="application/ld+json">' . $json_content . "</script></div>\r\n";
}
}
}, 99999);
}, 1);
ステップ4:HUSKY管理画面(SEO URLリクエスト→SEOテキストフィールド)にて
- スキーマキーのみを入力します(例:
category1) - 完全なJSON-LDコードは入力しないでください
方法2:動的なPHPファイル(動的スキーマ用)
ステップ1:/wp-content/uploads/json-ld-schemas/内にPHPスキーマファイルを作成します
例:category-dynamic.php
<?php
global $wp_query;
$term = get_queried_object();
$category_name = $term ? $term->name : 'Products';
$category_url = get_term_link($term);
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'CollectionPage',
'name' => $category_name,
'url' => $category_url,
'description' => term_description($term->term_id),
'breadcrumb' => array(
'@type' => 'BreadcrumbList',
'itemListElement' => array(
array(
'@type' => 'ListItem',
'position' => 1,
'name' => 'Home',
'item' => home_url()
),
array(
'@type' => 'ListItem',
'position' => 2,
'name' => $category_name,
'item' => $category_url
)
)
)
);
return $schema;
ステップ2:このコードをfunctions.phpに追加します:
add_action('init', function () {
$url_request = WOOF_EXT::$includes['applications']['url_request'];
remove_filter('woocommerce_after_shop_loop', array($url_request->seo, 'add_seo_text'), 99999);
add_filter('woocommerce_after_shop_loop', function () use ($url_request) {
$rule = $url_request->seo->check_search_rules();
if (!isset($rule['text']) || !$url_request->seo->do_index()) {
return;
}
$schema_key = apply_filters('woof_seo_text', $url_request->seo->replace_vars($rule['text'], $url_request->seo->get_current_replace_vars()));
if (!empty($schema_key)) {
$upload_dir = wp_upload_dir();
$schemas_dir = $upload_dir['basedir'] . '/json-ld-schemas/';
$schema_file = $schemas_dir . $schema_key . '.php';
if (file_exists($schema_file)) {
$schema_data = include($schema_file);
$json_output = json_encode($schema_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
echo '<div class="woof_seo_text"><script type="application/ld+json">' . $json_output . "</script></div>\r\n";
}
}
}, 99999);
}, 1);
使用例
HUSKY管理画面:
- 「SEO URLリクエスト」設定に移動します
- 特定のフィルター組み合わせに対するルールを作成します
- 「SEOテキスト」フィールドに、次のみを入力します:
category-dynamic(または任意のキー名) - 保存します
結果:
- スキーマファイル
/wp-content/uploads/json-ld-schemas/category-dynamic.phpが読み込まれます - JSON-LDがページソース内で適切にレンダリングされます
- Googleが構造化データを読み取り、検証できます

重要な注意事項
- HUSKY管理画面のSEOテキストフィールドではキーのみを使用します(例:
products、category1) - 完全なJSON-LDコードをHUSKY管理画面に直接貼り付けないでください
- 静的なスキーマの場合→
.jsonファイルを使用します - 動的なスキーマの場合→配列を返す
.phpファイルを使用します - 変更後はキャッシュをクリアします
検証
実装後、スキーマを検証してください:
- サイト上のフィルター適用済みページにアクセスします
- ページURLをコピーします
- https://search.google.com/test/rich-resultsでテストします
- エラーを確認します