コアアプデ後に「残したページ」の品質を上げた話 — 特集LP37本と駐車場UIリニューアル🏍️
はじめに
バイクポータルサイト「MotoHub」を個人開発しています。
前回の記事では、Googleコアアプデ後にサイトマップを21万→3.4万URLに削った話を書きました。
削るだけでは回復しません。残したページの品質を上げないと意味がない。
GWで取り組んだ「特集LP」と「駐車場詳細ページのUI改善」について書きます。
環境
さくらVPS 4GB
├── Docker Compose
│ ├── Nginx
│ ├── PHP-FPM(Laravel 12 / PHP 8.3)
│ ├── MySQL 8.0
│ ├── Redis
│ └── Meilisearch
└── Cloudflare(Free プラン)
なぜ「ページの品質」なのか
前回の記事で、サイトマップを7万→3.4万URLに削りました。Googleに「うちのサイトはこのページだけ見てくれ」と伝えた状態です。
でも、残したページの中身が薄かったら意味がない。Googleは次のクロールで「削ったけど、残ったページも大したことないじゃん」と判断します。
やるべきことは2つでした:
- 独自コンテンツのランディングページを新規作成する
- 既存ページのUIとコンテンツを強化する
施策①:特集LP — 28ページ → 37ページに拡大
特集LPとは
/features/ 配下に、テーマ別の独自コンテンツページを作りました。
/features/beginner-250cc → 初心者におすすめの250ccバイク10選
/features/cafe-racer → カフェレーサーの中古相場まとめ
/features/under-50man → 50万円以下で買えるバイク特集
/features/touring-large → ツーリング向け大型バイク比較
...
GW前に28ページあったものを、9ページ追加して37ページにしました。
なぜ特集LPが効くのか
通常の車種ページ(/bikes/honda/rebel-250)は、データベースから自動生成されるページです。掲載台数・価格・スペックが並んでいるだけ。
Googleはこういう「テンプレート生成ページ」を低く評価する傾向があります。 特に2024年以降のコアアプデでは、「自動生成されたコンテンツ」への評価が厳しくなっています。
特集LPは違います。
- テーマ設定が人間の判断(「初心者向け250cc」というくくり)
- 車種の選定理由を書いている(なぜこの10台なのか)
- 比較・分析がある(価格帯・維持費・リセールの比較表)
- MotoHubの実データを使った独自の考察がある
つまり「人間が考えて作った、データに基づく独自コンテンツ」です。
実装方法
特集LPはDBのテーブルで管理しています。
CREATE TABLE feature_pages (
id BIGINT PRIMARY KEY,
slug VARCHAR(255) UNIQUE,
title VARCHAR(255),
meta_description TEXT,
content LONGTEXT, -- Markdown形式
bike_model_ids JSON, -- 紐づく車種ID
is_published BOOLEAN DEFAULT FALSE,
published_at TIMESTAMP NULL,
created_at TIMESTAMP,
updated_at TIMESTAMP
);
Bladeテンプレートでは、紐づく車種のリアルタイムデータを表示します。
// resources/views/features/show.blade.php
@foreach($featurePage->bikeModels as $model)
<div class="feature-card">
<h3>{{ $model->name }}</h3>
<p>掲載台数: {{ $model->active_listing_count }}台</p>
<p>平均価格: {{ number_format($model->average_price / 10000, 1) }}万円</p>
<p>価格帯: {{ number_format($model->min_price / 10000, 1) }}〜{{ number_format($model->max_price / 10000, 1) }}万円</p>
{{-- 6ヶ月相場推移グラフ --}}
@include('components.price-trend-chart', ['model' => $model])
</div>
@endforeach
ポイントは「静的な記事」+「動的なデータ」のハイブリッド。
記事の本文(選定理由・比較考察)は静的コンテンツ。でも価格・在庫数・相場グラフはリアルタイムで更新される。Googleはこの「常に最新のデータが反映されるページ」を好みます。
サイトマップへの追加
前回の記事で削ったサイトマップに、特集LPを新規追加しました。
// app/Console/Commands/GenerateSitemap.php
private function generateFeatures(): int
{
$features = FeaturePage::where('is_published', true)->get();
foreach ($features as $feature) {
$this->addUrl(
"/features/{$feature->slug}",
$feature->updated_at,
'weekly',
0.8 // 優先度高め
);
}
return $features->count();
}
priority を 0.8 に設定。通常ページの 0.6 より高く、トップページの 1.0 より低い。「このページは重要だからクロールしてほしい」というシグナルです。
施策②:駐車場詳細ページのUI改善
Before:データが並んでいるだけ
改善前の駐車場詳細ページは、住所・料金・営業時間が並んでいるだけでした。
正直、NAVITIMEやakippaと何も変わらない。同じ情報を並べているだけなら、ドメインパワーの強い方が勝ちます。
After:独自機能で差別化
GWで以下の機能を追加・改善しました。
1. 料金カードUIの改善
料金情報をカード形式で見やすく表示。時間貸し・1日最大・月極の料金を一目で比較できるように。
<!-- 料金ヒーローセクション -->
<div class="grid grid-cols-3 gap-4">
<div class="bg-blue-50 rounded-lg p-4 text-center">
<p class="text-sm text-gray-500">時間料金</p>
<p class="text-2xl font-bold text-blue-600">
{{ $parking->price_per_hour }}円/時
</p>
</div>
<div class="bg-green-50 rounded-lg p-4 text-center">
<p class="text-sm text-gray-500">1日最大</p>
<p class="text-2xl font-bold text-green-600">
{{ $parking->max_price_per_day }}円
</p>
</div>
<div class="bg-purple-50 rounded-lg p-4 text-center">
<p class="text-sm text-gray-500">月極</p>
<p class="text-2xl font-bold text-purple-600">
{{ number_format($parking->price_per_month) }}円/月
</p>
</div>
</div>
2. 料金シミュレーター
「3時間停めたらいくら?」がその場で計算できる。これはNAVITIMEにもakippaにもない機能。
3. 入庫可能バイク判定
駐車場の車両制限とバイクのサイズを照合して、「あなたのバイクは停められるか?」を判定する機能。
4. 周辺料金比較
半径500m以内の他の駐車場との料金比較表を自動生成。「この駐車場は周辺と比べて安いのか高いのか」が一目でわかる。
5. Google Maps + Street View
Leafletマップに加えて、Google Maps へのリンクとStreet View Static APIで現地の写真を表示。「行ったことない駐車場でも雰囲気がわかる」。
6. FAQ + JSON-LD
よくある質問をページ内に表示しつつ、FAQ構造化データ(JSON-LD)を追加。Google検索結果にFAQが表示される可能性が生まれる。
// FAQ JSON-LD
$faq = [
[
'question' => "{$parking->name}は何台停められますか?",
'answer' => "{$parking->capacity}台駐車可能です。"
],
[
'question' => "{$parking->name}の料金はいくらですか?",
'answer' => "時間料金は{$parking->price_per_hour}円/時、1日最大{$parking->max_price_per_day}円です。"
],
];
改善の考え方
同じデータで勝負したらドメインパワーで負ける。勝つには「ここにしかない情報」を出すしかない。
| 機能 | NAVITIME | akippa | MotoHub |
|---|---|---|---|
| 住所・料金 | ○ | ○ | ○ |
| 料金シミュレーター | × | × | ○ |
| バイクサイズ判定 | × | × | ○ |
| 周辺料金比較 | × | × | ○ |
| Street View | × | × | ○ |
| FAQ構造化データ | × | × | ○ |
MotoHubはバイク専門。車も自転車も扱うNAVITIMEには、ここまでバイクに特化した機能は作れない。ニッチで勝つ。
結果と今後
数字(暫定)
| 項目 | Before | After |
|---|---|---|
| 特集LP | 28ページ | 37ページ |
| 駐車場ページの独自機能 | 2つ | 6つ |
| サイトマップ内の特集LP | 0 | 37URL(priority 0.8) |
5/12以降の確認予定
- 特集LPのインデックス状況(37ページ中何ページがインデックスされるか)
- 駐車場詳細ページの掲載順位変化
- 「駅名 バイク 駐車場」系クエリのCTR変化
学んだこと
1. 削った後に「残したページの質」を上げないと意味がない
サイトマップを削っただけでは、Googleへの「お願い」にすぎない。残したページが高品質であって初めて「このサイトは質の高いページだけを持っている」と評価される。
2. テンプレート生成ページだけでは戦えない
DBから自動生成したページは便利だけど、Googleの評価は低い。人間の判断が入った独自コンテンツ(特集LP)を混ぜることで、サイト全体の評価が上がる。
3. ドメインパワーで負けるなら「機能」で勝つ
同じデータを並べたら大手に負ける。料金シミュレーターやバイクサイズ判定のような「ここにしかない機能」がGoogleの「ユーザーにとって有益なページ」判定につながる。
次の記事
このシリーズの最終回は、GWで構築したニュース全自動生成システムについて書きます。Claude APIで毎日オリジナルニュースを生成し、X(Twitter)に自動投稿するまでの仕組みです。
- サイトマップ7万→3.4万に削った話
- 残したページの品質を上げた話(この記事)
- Claude APIでバイクニュースを全自動生成→X投稿まで自動化した話(次回)
前回の記事:Googleコアアプデで35%減 → サイトマップ7万URLを3.4万に削った話
🏍 MotoHub: https://motohub.jp
X: https://x.com/motohub_jp
GitHub: https://github.com/ausssxi/MotoHub

