0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コアアプデ後に「残したページ」の品質を上げた話 — 特集LP37本と駐車場UIリニューアル🏍️

0
Posted at

コアアプデ後に「残したページ」の品質を上げた話 — 特集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つでした:

  1. 独自コンテンツのランディングページを新規作成する
  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:データが並んでいるだけ

改善前の駐車場詳細ページは、住所・料金・営業時間が並んでいるだけでした。

image.png

正直、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にもない機能。

image.png

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)に自動投稿するまでの仕組みです。

  1. サイトマップ7万→3.4万に削った話
  2. 残したページの品質を上げた話(この記事)
  3. 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?