1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Astro+Firebaseで制作したBlogサイトをきちんとBlogサイトとして認識させる。

1
Posted at

前提

 AIもでてきたし、時代は個人サイトだよね(自分にしか需要がなかったり、あまりにニッチなことをやろうとすると結局手作りしかないよね。その手間が一瞬で終わるならなおさらの意味)。ということで、あらためてデジタル盆栽(趣味、好きな技術で実装するお遊びサイトの意味)をやっていたサイトをちゃんと各種サイトにBlogとして認識させるところまで持っていってみた

Monosnap muzigen.net - Brave 2026-01-21 21.43.51.png
よくわからん文言はAIが勝手につけており、面白いのでそのままにしてある。

ソースはこちら

技術スタック

  • Astro 5.16.4
  • Tailwind CSS

バックエンド / データベース

  • Firebase 12.6.0 - クライアントSDK
  • Firebase Admin 13.6.0 - サーバーサイドSDK
  • Firestore - NoSQLデータベース
  • Firebase Storage - ファイルストレージ
  • Firebase Hosting - ホスティング

SEO / アナリティクス

  • @astrojs/sitemap 3.6.0 - サイトマップ生成
  • @astrojs/rss 4.0.14 - RSSフィード生成
  • @astrojs/partytown 2.1.4 - サードパーティスクリプト最適化(Google Analytics用)

モニタリング / エラートラッキング

  • @sentry/astro 10.29.0 - エラートラッキング
  • Sentry - プロジェクト: muzigen-net

テスト / 自動化

  • Playwright 1.57.0 - E2Eテスト
  • @astrojs/check 0.9.6 - TypeScript & Astroチェック

パッケージマネージャー

  • pnpm - バージョン10

デプロイ / CI/CD

  • GitHub Actions - 自動デプロイワークフロー
  • Firebase Hosting - 本番環境

やってること

  • firestorに記事データを保存、それをAstroで記事にしてhtml化というわけで、html直表示であるのでそれなりに軽快に動作してくれる

課題

 ところで、最近転職活動をしているにあたって https://lapras.com/ というサイトを使っているんだけど、ここで自分の作ったサイトの記事がBlogとして認識してくれないという問題があった(以下が自分のProfileページ、現在は認識してくれている)

 となればやることは、AIに「クローラーや各種WebサイトにBlogとして認識してもらうために必要な施策を各種実装してください」とお願いすることであり、改善施策を一通りやってもらった。というわけでやってもらった施策が以下。

↓以下AIによる解説

クローラーがブログとして認識するために必須の施策

1. 構造化データ (JSON-LD / Schema.org) ⭐最重要

該当コミット: d66b48d, 6f3fa0f, 5386231

必要なスキーマ:

  • BlogPosting - 「これはブログ記事です」と明示的に宣言
  • Blog - サイト全体やブログセクションがブログであることを宣言
  • WebSite - サイト全体の構造を示す
  • Organization / Person - 著者・運営者情報

なぜ重要か:

  • Googleなどの検索エンジンに「これはブログである」と明示的に伝える唯一の方法
  • 記事の構造(タイトル、本文、著者、公開日、カテゴリ)を機械可読形式で提供
  • リッチスニペット(検索結果での拡張表示)の条件

2. RSS/Atomフィード

該当コミット: 384aa73, 61e6e35

重要な要素:

  • /rss.xml エンドポイント
  • タグ
  • 各記事の公開日(pubDate)と更新日

なぜ重要か:

  • RSS/Atomフィードはブログの伝統的な標識
  • 時系列で更新されるコンテンツであることを示す
  • 多くのクローラーがRSSの存在で「ブログ」と判断

3. サイトマップ

該当コミット: 72d44d2

重要な要素:

  • sitemap.xml の自動生成
  • 各URLの最終更新日(lastmod)
  • 優先度(priority)と更新頻度(changefreq)

なぜ重要か:

  • サイト全体の構造とすべての記事をクローラーに伝える
  • 記事の更新頻度を示すことで「定期的に更新されるブログ」と認識される

4. 記事の時系列情報(日付メタデータ)

該当コミット: 310441c, ed40130

必要な要素:

  • 公開日(datePublished)
  • 更新日(dateModified)
  • OGPのarticle:published_timeとarticle:modified_time

なぜ重要か:

  • ブログの定義は「時系列で更新されるコンテンツ」
  • 日付情報がないとニュースサイトや静的なコンテンツと区別できない

5. 著者情報

該当コミット: 29828d1, 310441c, d66b48d

必要な要素:

  • 構造化データのauthorフィールド(PersonまたはOrganization)
  • OGPのarticle:author
  • 著者プロフィールページへのリンク

なぜ重要か:

  • ブログは「誰かが書いたもの」という前提
  • GoogleのE-E-A-T評価(専門性・権威性・信頼性)に影響
  • 著者情報がないと自動生成コンテンツと見なされる可能性

6. タグ/カテゴリー構造

該当コミット: 1d5e5f1, 90c6dba

必要な要素:

  • タグ/カテゴリーページ
  • 構造化データのkeywordsまたはarticleSection
  • OGPのarticle:tag

なぜ重要か:

  • ブログは通常、トピック別に分類されている
  • トピッククラスタ構造により「専門性のあるブログ」と認識される

優先順位付き実装リスト

クローラーにブログとして認識されるための優先度順:

🔴 必須(これがないとブログとして認識されない)

  1. BlogPosting構造化データ - 各記事ページに実装
  2. 記事の公開日・更新日 - datePublished, dateModified
  3. 著者情報 - author フィールド

🟡 非常に重要(ブログの標準機能)

  1. RSSフィード - /rss.xml + フィード検出タグ
  2. サイトマップ - sitemap.xml
  3. Blog/WebSite構造化データ - サイト全体の宣言

🟢 推奨(ブログとしての品質を高める)

  1. タグ/カテゴリー構造 - トピック分類
  2. 著者プロフィールページ - 著者の信頼性確立

確認方法

これらが正しく実装されているかは以下のツールで確認できます:

  1. 構造化データ: https://search.google.com/test/rich-results
  2. RSSフィード: フィードバリデーター、または直接 /rss.xml にアクセス
  3. サイトマップ: /sitemap.xml にアクセス、またはGoogle Search Consoleで確認

最も重要なのは構造化データ(BlogPosting + 日付 + 著者)とRSSフィードの2つです。これがあれば、クローラーは確実にブログとして認識します。


ここまでがAIによる解説

まとめ

と、体裁を整えたところで、Laprasにも無事記事として認識されるようになり、個人ブログに記事を書くモチベーションになったなーというお話でした。RSSとかメタデータがあればいいのかなと思っていたら、著作者データとかいろいろフォーマットがきまっているのね。と学びがありました。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?