AstroでTOPページとその他のページで条件分岐する方法を実用例付きで紹介

AstroでTOPページとその他のページで条件分岐する方法を実用例付きで紹介

Webサイト制作において、TOPページとその他のページで表示する内容を変えたい場合がありますね。

例えば、TOPページではロゴをh1タグにしたいが、下層ページではaタグでリンクを設定したいという場面がよくあります。

そこで今回の記事では、AstroでTOPページやその他のページで条件分岐する方法を紹介します。

開発環境のバージョン

当記事で紹介する方法は、以下のバージョンで動作確認を行っています。

検証環境のバージョン情報

Astro
Astro 5.0.5

バージョンの違いによっては、この記事の通りに動作しない可能性がありますので、ご理解いただけますと幸いです。

AstroでTOPページかどうかを判定する

Astroで現在表示中のページがTOPページかどうかを判定するには、以下のコードを.astroファイル内のフロントマターに記述します。

Astro
    ---
// TOPページならtrue、それ以外ならfalse
const isTopPage = Astro.url.pathname === '/';
---
  

Astro.url.pathnameは、現在のページのパスを取得できます。

現在のパスが'/' = TOPページとなるので、isTopPagetrueになります。

反対に、/about/contactなどのパスの場合はfalseになり、その他のページと判定されます。

TOPページでのみ表示する場合

TOPページでのみ表示する場合は、isTopPagetrueの場合に表示するようにします。

Astro
    ---
const isTopPage = Astro.url.pathname === "/";
---
 
{
  isTopPage && (
    <div>TOPページでのみ表示する内容</div>
  )
}
  

TOPページ以外で表示する場合

TOPページ以外で表示する場合は、isTopPagefalseの場合に表示するようにします。

Astro
    ---
const isTopPage = Astro.url.pathname === "/";
---
 
{
  !isTopPage && (
    <div>TOPページ以外で表示する内容</div>
  )
}
  

TOPページとその他のページで表示を分ける場合

TOPページとその他のページで表示する内容を分けたい場合は、以下のように記述します。

Astro
    ---
const isTopPage = Astro.url.pathname === "/";
---
 
{
  isTopPage ? (
    <div>TOPページでのみ表示する内容</div>
  ) : (
    <div>TOPページ以外で表示する内容</div>
  )
}
  

【実用例1】TOPページのみロゴをh1タグにする

サイトのヘッダーやフッターに置かれることの多いロゴ画像を、

  • TOPページではh1タグにしたい
  • 下層ページではaタグにしてTOPページへのリンクを設定したい

という場合がよくありますが、この場合は以下のように記述します。

src/components/Header.astro
Astro
    ---
const isTopPage = Astro.url.pathname === "/";
---
 
<header>
  {
    isTopPage ? (
      <h1>ロゴ</h1>
    ) : (
      <a href="/">ロゴ</a>
    )
  }
</header>
  

これでTOPページならロゴはh1タグに、それ以外ではTOPページへと遷移するaタグになります。

【実用例2】TOPページのみプロモーションバナーを表示する

TOPページにはプロモーションバナーを表示し、他のページでは省略する場合は、以下のように記述します。

Astro
    ---
import PromoBanner from '@/components/PromoBanner.astro';
const isTopPage = Astro.url.pathname === '/';
---
 
{isTopPage && (
  <PromoBanner />
)}
<main>
  <slot />
</main>
  

これでTOPページのみ<PromoBanner />コンポーネントが表示され、他のページでは非表示になります。

【まとめ】AstroでTOPページやその他のページで条件分岐する方法

今回の記事では、AstroでTOPページかその他のページかどうかを判定し、条件分岐する方法を紹介しました。

Astro
    ---
// TOPページならtrue、それ以外ならfalse
const isTopPage = Astro.url.pathname === '/';
---
  

Astro.url.pathnameで現在のページのパスを取得し、'/'ならTOPページ、それ以外ならその他のページと判定することで条件分岐しています。

もしTOPページとその他のページで表示を分ける必要がある場合は、ぜひ参考にしてみてください。

また、今回使用したAstro.urlオブジェクトに関しては以下の記事で詳しく解説していますので、併せてご覧いただければと思います。

Astroで現在のページのパスやURLを取得する方法 | WebTech Media
Astroで現在のページのパスやURLを取得する方法を詳しく解説します。Astro.urlやAstro.requestなどのランタイムAPIを活用した具体例と実装コードも合わせて紹介します。
Astroで現在のページのパスやURLを取得する方法 | WebTech Media favicon https://webtech-media.jp/article/astro-get-url
Astroで現在のページのパスやURLを取得する方法 | WebTech Media