2026年5月20日
2026年5月20日
WordPressのローカルSEO設定方法
はじめに
ローカルSEOは「地域名 + 業種」での検索(例:「渋谷 美容院」「新宿 歯医者」)で上位表示を狙うSEO手法です。WordPressサイトにLocalBusiness構造化データを実装し、Googleビジネスプロフィールと連携することで、地域検索での可視性を高められます。
症状・原因
- 地域名を含む検索キーワードで自社サイトが表示されない
- Googleマップのローカルパック(地図付き検索結果)に表示されない
- 店舗名・住所・電話番号(NAP情報)がサイト内で統一されていない
- Googleビジネスプロフィールとサイトの情報が一致していない
解決手順
ステップ1:NAP情報を統一する
【NAP = Name, Address, Phone Number】
NAP情報の統一チェックリスト:
✅ 店舗名: 登記名・屋号・略称を統一
✅ 住所: 〒マーク・番地表記の形式を統一
例: 「東京都渋谷区渋谷1-1-1 渋谷ビル3F」で統一
✅ 電話番号: ハイフンの有無・市外局番を統一
例: 「03-1234-5678」で統一(0312345678 は NG)
確認すべき場所:
・WordPressサイトのフッター・コンタクトページ
・Googleビジネスプロフィール
・SNS(Facebook・Instagram・Twitter)
・各種ポータルサイト(ぐるなび・食べログ等)
・Yahoo!プレイス
NAP情報の不一致はローカルSEO評価を下げる原因になります。
ステップ2:LocalBusiness構造化データを実装する
// functions.php: LocalBusiness 構造化データを出力
add_action('wp_head', function(): void {
// コンタクトページまたはトップページで出力
if (!is_front_page() && !is_page('contact')) {
return;
}
$schema = [
'@context' => 'https://schema.org',
'@type' => 'LocalBusiness', // または Restaurant, MedicalClinic 等
'name' => get_bloginfo('name'),
'url' => home_url('/'),
'telephone' => '03-1234-5678',
'email' => 'info@example.com',
'address' => [
'@type' => 'PostalAddress',
'streetAddress' => '渋谷1-1-1 渋谷ビル3F',
'addressLocality' => '渋谷区',
'addressRegion' => '東京都',
'postalCode' => '150-0002',
'addressCountry' => 'JP',
],
'geo' => [
'@type' => 'GeoCoordinates',
'latitude' => 35.658580,
'longitude' => 139.701330,
],
'openingHoursSpecification' => [
[
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
'opens' => '09:00',
'closes' => '18:00',
],
[
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => ['Saturday'],
'opens' => '10:00',
'closes' => '17:00',
],
],
'image' => get_site_icon_url(512) ?: get_template_directory_uri() . '/images/store.jpg',
'priceRange' => '¥¥',
'sameAs' => [
'https://www.google.com/maps/place/YOUR_PLACE_ID',
'https://www.facebook.com/YOUR_PAGE',
'https://twitter.com/YOUR_ACCOUNT',
],
];
echo '<script type="application/ld+json">'
. wp_json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)
. '</script>' . PHP_EOL;
}, 5);
ステップ3:Googleマップを埋め込む
// functions.php: Googleマップ埋め込みショートコード
add_shortcode('google_map', function(array $atts): string {
$atts = shortcode_atts([
'place_id' => '',
'address' => '東京都渋谷区渋谷1-1-1',
'zoom' => '15',
'width' => '100%',
'height' => '400',
'api_key' => get_option('google_maps_api_key', ''),
], $atts);
if (empty($atts['api_key'])) {
// APIキーなしの埋め込み(機能制限あり)
$encoded = urlencode($atts['address']);
return '<div class="google-map" style="width:' . esc_attr($atts['width'])
. ';height:' . esc_attr($atts['height']) . 'px">'
. '<iframe src="https://maps.google.com/maps?q='
. $encoded . '&output=embed" width="100%" height="100%"'
. ' style="border:0" allowfullscreen loading="lazy"'
. ' referrerpolicy="no-referrer-when-downgrade"></iframe>'
. '</div>';
}
// APIキーあり(より高機能)
return '<div id="gmap-' . uniqid() . '" class="google-map"'
. ' style="width:' . esc_attr($atts['width'])
. ';height:' . esc_attr($atts['height']) . 'px"'
. ' data-place-id="' . esc_attr($atts['place_id']) . '"'
. ' data-zoom="' . esc_attr($atts['zoom']) . '"></div>';
});
// 使い方: [google_map address="東京都渋谷区渋谷1-1-1" height="450"]
ステップ4:ローカルキーワードでコンテンツを最適化する
// functions.php: 地域名を含むtitleタグの最適化
add_filter('pre_get_document_title', function(string $title): string {
// トップページに地域名を追加
if (is_front_page()) {
$city = get_option('local_seo_city', '渋谷');
$service = get_option('local_seo_service', 'Webデザイン');
return $city . 'の' . $service . ' | ' . get_bloginfo('name');
}
return $title;
});
// 管理画面にローカルSEO設定を追加
add_action('admin_init', function(): void {
register_setting('general', 'local_seo_city');
register_setting('general', 'local_seo_service');
register_setting('general', 'google_maps_api_key');
add_settings_field(
'local_seo_city',
'対象エリア(地域名)',
function(): void {
$val = get_option('local_seo_city', '');
echo '<input type="text" name="local_seo_city" value="' . esc_attr($val) . '" class="regular-text">';
},
'general'
);
});
ステップ5:Googleビジネスプロフィールと連携する
// functions.php: Googleビジネスプロフィールのレビューを表示
// ※ Google Places API が必要
add_shortcode('google_reviews', function(array $atts): string {
$atts = shortcode_atts([
'place_id' => '',
'count' => 5,
'api_key' => get_option('google_maps_api_key', ''),
], $atts);
if (empty($atts['place_id']) || empty($atts['api_key'])) {
return '';
}
// キャッシュを使ってAPIコールを減らす
$cache_key = 'google_reviews_' . md5($atts['place_id']);
$reviews = get_transient($cache_key);
if (false === $reviews) {
$url = 'https://maps.googleapis.com/maps/api/place/details/json?'
. http_build_query([
'place_id' => $atts['place_id'],
'fields' => 'reviews,rating,user_ratings_total',
'language' => 'ja',
'key' => $atts['api_key'],
]);
$response = wp_remote_get($url, ['timeout' => 10]);
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
$reviews = $data['result'] ?? [];
// 6時間キャッシュ
set_transient($cache_key, $reviews, 6 * HOUR_IN_SECONDS);
}
if (empty($reviews['reviews'])) {
return '<p>レビューを取得できませんでした。</p>';
}
$rating = $reviews['rating'] ?? 0;
$total = $reviews['user_ratings_total'] ?? 0;
$output = "<div class='google-reviews'>";
$output .= "<p class='overall-rating'>総合評価: {$rating} ★ ({$total}件)</p>";
$output .= "<ul class='review-list'>";
foreach (array_slice($reviews['reviews'], 0, (int)$atts['count']) as $review) {
$stars = str_repeat('★', $review['rating'] ?? 0);
$output .= '<li class="review-item">';
$output .= '<strong>' . esc_html($review['author_name'] ?? '') . '</strong>';
$output .= ' <span class="stars">' . $stars . '</span>';
$output .= '<p>' . esc_html($review['text'] ?? '') . '</p>';
$output .= '</li>';
}
$output .= '</ul></div>';
return $output;
});
注意事項
- Googleビジネスプロフィールのオーナー確認(はがき・電話・動画)を完了しないと、プロフィールの編集ができません。まずオーナー確認を完了させてください
- NAP情報はWordPressサイトとGoogleビジネスプロフィールで完全に一致させることが重要です。表記揺れ(「丁目」vs「-1」など)もSEO評価に影響します
- 構造化データのtypeは業種に合わせて変更してください。レストランは
Restaurant、医療機関はMedicalClinic、小売店はStoreなど、schema.orgの適切なタイプを選択します
まとめ
ローカルSEOはNAP情報の統一から始め、LocalBusiness構造化データをフロントページに実装します。Googleビジネスプロフィールのオーナー確認を完了させ、サイトの情報と完全に一致させます。地域名を含むtitleタグの最適化、Googleマップの埋め込み、Googleレビューの表示でローカル検索での露出を高めます。schema.orgのtypeは業種に合わせてRestaurant・MedicalClinic・Store等に変更してください。