2025年06月14日
microCMSの投稿からOGPを取得して画像とリンクカードを作る

Webサイトやブログ記事で外部サイトへのリンクを貼る際、単なるURLだけでは情報が伝わりにくく、ユーザーのクリックを促しにくいことがあります。そこで活用したいのがOGP (Open Graph Protocol) です。OGPは、Webページの内容をSNSなどで魅力的に表示させるためのメタデータで、これを利用することで、リンクを画像付きのリンクカードとして表示できるようになります。
この記事では、OGPデータを取得して記事内のリンクを自動的にリッチなリンクカードに変換するJavaScriptコードとその仕組み、そしてその見た目を整えるCSSについて解説します。
この記事ではNext.jsのApp routerを使って下記のようなリンクカードを作る方法をご紹介します!
OGPをリンクカードにすることの効能
OGP(Open Graph Protocol)を使ってブログ記事のリンクをカード形式で表示することには、以下のような効能があります。
1. 視認性・訴求力の向上
リンクカードはタイトル・説明・画像がまとまって表示されるため、テキストリンクよりも目立ち、ユーザーの興味を引きやすくなります。
2. クリック率の向上
画像や説明文があることで、リンク先の内容が直感的に伝わり、クリックされやすくなります。
3. SNSシェア時の最適化
OGP情報が正しく設定されていれば、TwitterやFacebookなどSNSでシェアされた際にも美しいカード形式で表示され、拡散効果が高まります。
4. サイトの信頼性向上
リンクカードはデザイン的にも整って見えるため、サイト全体の信頼感やプロフェッショナル感がアップします。
ブラキオではこのようにヘッドレスCMSから取得した記事をカスタマイズすることも可能
リンクカード自動生成の仕組みを支える2つの主要なコード
今回ご紹介するリンクカードの自動生成は、主に以下の2つのJavaScriptコードと、その見た目を定義するCSSによって実現されます。
getOGPData
: 指定されたURLからOGPデータを取得するサーバーサイドの関数useParseBody
: 記事本文からリンクを抽出し、getOGPData
で取得した情報をもとにリンクカードに変換するReactフック- CSS: 生成されたリンクカードの見た目を整えるスタイルシート
getOGPData
: OGPデータを取得する
まず、外部サイトのOGP情報を取得するための関数getOGPData
から見ていきましょう。この関数は、指定されたURLにアクセスし、そのページのHTMLからOGP関連のメタデータを抽出します。
'use server'
import * as cheerio from 'cheerio'
export type OGPData = {
title: string
description: string
image: string
}
export async function getOGPData(url: string): Promise<OGPData> {
try {
// 1. 指定されたURLからHTMLを取得
const response = await fetch(url)
const html = await response.text()
// 2. cheerioを使ってHTMLをパース
const $ = cheerio.load(html)
// 3. メタタグからOGP情報を抽出するヘルパー関数
const getMetaTag = (name: string) => {
return (
$(`meta[name=${name}]`).attr('content') || // 通常のmetaタグ (name属性)
$(`meta[property="og:${name}"]`).attr('content') || // Open Graphプロパティ
$(`meta[property="twitter:${name}"]`).attr('content') // Twitter Cardsプロパティ
)
}
// 4. 抽出した情報をOGPDataオブジェクトとして返す
return {
title: getMetaTag('title') || 'No title', // タイトル
description: getMetaTag('description') || 'No description', // 説明
image: getMetaTag('image') || '' // サムネイル画像
}
} catch (error) {
console.error('Error fetching OGP data:', error)
throw new Error('Failed to fetch OGP data')
}
}
コードのポイント
'use server'
: Next.jsのサーバーコンポーネントまたはサーバーアクションであることを示します。これにより、クライアントサイドではなくサーバーサイドでデータのフェッチが行われ、APIキーなどの機密情報を安全に扱うことができます。cheerio
: Node.jsでHTMLをパースし、jQueryのようなシンタックスでDOM操作を可能にするライブラリです。cheerio.load(html)
で取得したHTMLを読み込み、DOM要素にアクセスできるようになります。fetch(url)
: 指定されたURLにHTTPリクエストを送信し、ページのHTMLコンテンツを取得します。getMetaTag
関数:- OGP情報は
<meta>
タグに記述されています。このヘルパー関数は、name
属性、property="og:"
、property="twitter:"
のいずれかで指定されたメタタグのcontent
属性値を取得しようとします。 - これは、サイトによってOGP情報の記述方法が異なる場合があるため、汎用的に情報を取得できるようにするための工夫です。
- OGP情報は
- 返り値: 取得した
title
、description
、image
の各情報をOGPData
型として返します。情報が見つからなかった場合はデフォルト値が設定されます。
useParseBody
: 記事本文のリンクをリンクカードに変換する
次に、実際の記事本文を解析し、OGPデータを利用してリンクカードを生成するReactフックuseParseBody
を見ていきましょう。
import { useEffect, useState } from 'react'
import * as cheerio from 'cheerio'
import { getOGPData, OGPData } from '../actions/getOGPDataActions'
const urlPattern = /^(https?:\\\\/\\\\/[^\\\\s$.?#].[^\\\\s]*)$/ // URLの正規表現パターン
export function useParseBody(body: string) {
const [parsedBody, setParsedBody] = useState<string>(body || '') // パース後のHTMLを保持
useEffect(() => {
const parseAndFetchOGP = async () => {
const $ = cheerio.load(body || '') // 記事本文をcheerioで読み込み
const links: string[] = [] // 処理対象となるリンクを格納する配列
// リンクを収集する関数
const collectLinks = () => {
$('p > a').each((_, link) => { // <p>タグの子要素の<a>タグを走査
if ($(link).find('img').length === 0) { // <img>タグを含まないリンクのみを対象
const href = $(link).attr('href')
const linkText = $(link).text()
// hrefが存在し、かつリンクのテキストがURLパターンに一致する場合
if (href && urlPattern.test(linkText)) {
links.push(href) // リンクを収集リストに追加
}
}
})
}
// OGPデータを取得する関数
const fetchOGPData = async () => {
// 収集した各リンクに対してgetOGPDataを並行して実行
const ogpDataPromises = links.map((href) => getOGPData(href))
return await Promise.all(ogpDataPromises) // 全てのOGPデータ取得を待つ
}
// リンクカードを生成する関数
const generateLinkCards = (hrefToOgpData: Map<string, OGPData>) => {
$('p > a').each((_, link) => {
if ($(link).find('img').length === 0) {
const href = $(link).attr('href')
const linkText = $(link).text()
if (!href || href.startsWith('#')) return // リンクがない、またはページ内リンクの場合はスキップ
const meta: OGPData | undefined = hrefToOgpData.get(href) // 対応するOGPデータを取得
if (!meta || !urlPattern.test(linkText)) return // OGPデータがない、またはテキストがURLでない場合はスキップ
// リンクカードのHTML構造を生成
const linkCardHTML = `
<div class="link-card">
<a href="${href}" target="_blank" rel="noopener noreferrer">
<div class="link-card-body">
<div class="link-card-info">
<div class="link-card-head">
<div class="link-card-title">${meta.title}</div>
<div class="link-card-description">${meta.description}</div>
</div>
<div class="link-card-url">${href}</div>
</div>
${meta.image ? `<div class="link-card-thumbnail"><img src="${meta.image}" alt="thumbnail" /></div>` : ''}
</div>
</a>
</div>
`
$(link).replaceWith(linkCardHTML) // 元のリンクを生成したリンクカードHTMLに置き換える
}
})
}
// 実行フロー
collectLinks() // 記事内のリンクを収集
const ogpDataResults = await fetchOGPData() // 収集したリンクのOGPデータを一括取得
// リンクのURLとOGPデータをマッピング
const hrefToOgpData = new Map<string, OGPData>()
links.forEach((href, index) => {
hrefToOgpData.set(href, ogpDataResults[index])
})
generateLinkCards(hrefToOgpData) // OGPデータを使ってリンクカードを生成
setParsedBody($.html()) // 変換後のHTMLを状態として設定
}
parseAndFetchOGP() // useEffectの初回マウント時とbodyが変更された時に実行
}, [body])
return { parsedBody } // パース済みのHTMLを返す
}
コードのポイント
useEffect
:body
プロパティが変更されたときに、記事のパースとOGPデータのフェッチ処理を実行します。useState
: パースおよびOGPデータ適用後のHTMLコンテンツをparsedBody
として保持します。cheerio.load(body)
: 渡された記事のHTML文字列をCheerioで解析し、DOM操作を可能にします。collectLinks
関数:- 記事中の
<p>
タグの下にある<a>
タグを走査します。 - 特に、画像を含まない(つまり、テキストリンクである)
<a>
タグのみを対象とし、そのhref
属性とリンクテキストがURLパターンに一致するかを確認します。これにより、単なるテキストとしてのURLがリンクカードの対象となります。
- 記事中の
fetchOGPData
関数:Promise.all
を使って、収集した複数のリンクに対してgetOGPData
関数を並行して実行します。これにより、OGPデータの取得処理が高速化されます。
generateLinkCards
関数:- OGPデータが取得できたリンクに対して、事前に定義されたHTMLテンプレートにOGPのタイトル、説明、画像を埋め込み、リッチなリンクカードのHTMLを生成します。
- 元の
<a>
タグをこの生成されたリンクカードのHTMLに置き換えます。
urlPattern
: リンクテキストが有効なURL形式であるかをチェックするための正規表現です。parsedBody
の更新: 全ての処理が完了した後、最終的に変換されたHTML文字列がsetParsedBody
によって状態として更新され、このフックを利用するコンポーネントで利用できるようになります。
CSS: リンクカードの見た目を整える
最後に、生成されたリンクカードを美しく表示するためのCSSを見ていきましょう。このCSSは、リンクカード全体のレイアウト、画像(サムネイル)、テキストの表示方法などを定義しています。
:global(.link-card) {
display: block; // ブロック要素として表示
height: fit-content; // コンテンツに合わせて高さを調整
margin: 0 0 1.5rem; // 下に余白
overflow: hidden; // はみ出たコンテンツを隠す
background-color: white; // 背景色
border:
1px solid theme.$color-border-default, // 枠線
rgb(46 37 3 / 13%);
border-radius: theme.$radius-sm; // 角の丸み
p {
margin: 0; // 内部のpタグの余白をリセット
}
a {
display: block;
height: 100%;
text-decoration: none; // デフォルトのアンダーラインを削除
&:hover {
text-decoration: none;
:global(.link-card-title) {
color: theme.$color-text-brand; // ホバー時にタイトル色を変更
}
:global(.link-card-thumbnail) {
img {
transform: scale(1.2); // ホバー時に画像を拡大
}
}
}
}
}
:global(.link-card-body) {
display: flex; // flexboxで内部要素を配置
gap: 1.5rem; // 要素間の隙間
height: 100%;
}
:global(.link-card-thumbnail) {
display: flex;
flex-shrink: 0; // 縮小しない
align-items: center; // 垂直方向中央揃え
justify-content: center; // 水平方向中央揃え
width: auto;
height: 128px; // 高さ固定
aspect-ratio: 1 / 1; // アスペクト比1:1
overflow: hidden;
@include theme.breakpoints(md) { // ミディアム以上の画面サイズの場合
height: 150px;
aspect-ratio: 1.91 / 1; // アスペクト比を変更
}
img {
width: 100%;
height: auto;
object-fit: cover; // 領域に合わせて画像を切り取る
transition: transform 0.2s ease; // ホバー時のアニメーション
}
}
:global(.link-card-info) {
display: flex;
flex-direction: column; // 垂直方向に要素を配置
flex-grow: 1; // 可能な限り幅を広げる
justify-content: space-between; // 要素間のスペースを均等にする
padding: 1.5rem; // 内側の余白
}
:global(.link-card-title) {
@include theme.font-size(14); // フォントサイズ
display: -webkit-box; // 複数行のテキストを制御
width: 100%;
max-height: 1.55em; // 最大高さ
margin: 0 0 0.5rem;
overflow: hidden;
color: theme.$color-text-default;
-webkit-line-clamp: 1; // 1行に制限
-webkit-box-orient: vertical;
}
:global(.link-card-description) {
@include theme.font-size(12);
display: -webkit-box;
width: 100%;
margin: 0 0 0.5rem;
overflow: hidden;
color: theme.$color-text-subtlest;
-webkit-line-clamp: 2; // 2行に制限
-webkit-box-orient: vertical;
}
:global(.link-card-url) {
@include theme.font-size(12);
display: -webkit-box;
width: 100%;
margin: 0;
overflow: hidden;
color: theme.$color-text-subtle;
-webkit-line-clamp: 1; // 1行に制限
-webkit-box-orient: vertical;
}
CSSのポイント
:global()
: CSSモジュールやScoped CSSを使用している場合でも、グローバルなスタイルを適用するために使用されます。.link-card
: リンクカード全体のスタイル(背景色、枠線、角丸、余白など)を定義します。- ホバー時のエフェクト: リンクカードにカーソルを合わせた際、タイトル色が変わったり、サムネイル画像が拡大するアニメーションが設定されており、ユーザーエクスペリエンスを高めます。
.link-card-body
: カードのメインコンテンツ部分をFlexboxでレイアウトし、情報とサムネイル画像を横並びに配置します。.link-card-thumbnail
: サムネイル画像のサイズ、アスペクト比、画像の表示方法(object-fit: cover
)を調整します。レスポンシブ対応として、メディアクエリ (@include theme.breakpoints(md)
) でブレークポイントごとに異なるアスペクト比を設定しています。.link-card-info
: タイトル、説明、URLのテキスト情報を格納する部分のレイアウトを定義します。.link-card-title
,.link-card-description
,.link-card-url
: 各テキスト要素のフォントサイズ、色、および**webkit-line-clamp
**プロパティを使って表示行数を制限し、テキストがはみ出ないように制御しています。これにより、デザインが崩れるのを防ぎ、見た目をきれいに保ちます。
まとめ
この記事で紹介したgetOGPData
とuseParseBody
、そして関連するCSSを組み合わせることで、手軽に記事内のURLをリッチなOGPリンクカードに自動変換することができます。これにより、ブログ記事やWebサイトの視認性が向上し、ユーザーが外部サイトのコンテンツを理解しやすくなり、クリック率の向上にも繋がるでしょう。
ご自身のサイトにこの機能を組み込んで、より魅力的なコンテンツ表示を実現してみてはいかがでしょうか。
この記事をシェアする
お気軽にご相談ください
会社のホームページが欲しい!名刺がわりになるコーポレートサイトが欲しい!などお気軽にご相談ください。
またパートナー企業をお探しの制作会社様や、フロントエンド開発もご連絡お待ちしております。
最近の投稿
Jamstackが解決する企業のWebサイト課題トップ3:速い・安全・落ちないサイトでビジネスを加速させる
Webサイトは企業のであり、ビジネス成長のエンジンであるはずです。しかし、多くの企業のWeb担当者様は、次のような潜在的な悩みを抱えていませんか?これらの悩みは、従来のウェブサイト構築手法、特になどの動的CMSの構造的な限界に起因しています。データベースと常に接続し、アクセスごとにサーバー側でページを生成するその仕組みは、利便性をもたらした反面、とに大きな弱点を抱えることになりました。その課題を根本から解決するのが、新しいウェブ構築の考え方であるです。本記事では、このJamstackが、企業が抱える最も深刻なWebサイトの課題トップ3をいかに解決するかを解説します。サイトの表示速度は、もはや**SEOやユーザー体験(UX)**の問題だけではありません。に直結する深刻な課題です。Googleの調査によると、モバイルページの表示速度がすると、ユーザーのすると言われています。これは、せっかく広告費やコンテンツ制作費をかけて集客したユーザーを、システムの都合で逃がしているに等しい状態です。Jamstackは、ウェブサイトのHTMLファイルを、しておきます(静的サイト生成)。この静的なファイルを、世界中に分散配置された**CDN(コンテンツデリバリーネットワーク)**から直接配信するため、データベースへの問い合わせやサーバーでの複雑な処理が一切発生しません。これにより、お客様のサイトはを手に入れ、GoogleがSEOで重要視する(LCP:最大コンテンツの描画速度など)のスコアも自然と改善し、に貢献します。従来の動的CMSは、データベースとの通信や、機能拡張のためのに強く依存しています。この構造は、ハッカーにとって絶好の標的となり、やを経由した不正アクセスやサイト改ざんのリスクが常に伴います。もし、企業サイトが改ざんされたり、情報漏洩が発生したりすれば、その修復コストだけでなく、顧客からのという計り知れないブランドリスクを負うことになります。Jamstackアーキテクチャでは、公開されているウェブサイトの本体からします。テレビCMの放映後や、大規模なキャンペーンを実施した際、「サイトが重くなった」「アクセスできなくなった」という経験はありませんか?従来のサーバー構成では、突発的な大量アクセスに対応するためには、事前にを行う必要があり、コスト効率が非常に悪いものでした。サーバーダウンは、キャンペーンによることを意味します。Jamstackサイトは、CDN(コンテンツ配信ネットワーク)を通じて世界中のエッジサーバーから配信されます。CDNは元々、大量のコンテンツを高速かつ安定して配信するために設計されているため、し、ダウンしにくい構造を持っています。Jamstackは、Webサイトを「コストセンター」ではなく、**「ビジネスを加速させる資産」**に変えるための最適なアーキテクチャです。ブラキオは、フロントエンドエンジニアとしての豊富な経験を活かし、お客様のビジネス課題解決を重視したJamstack開発を提供しています。「御社のWebサイトは上記の課題を抱えていませんか?」ぜひ一度、をご利用ください。御社のWebサイトを、次世代のプラットフォームへと進化させます。
2025.10.10
microCMSの投稿からOGPを取得して画像とリンクカードを作る
Webサイトやブログ記事で外部サイトへのリンクを貼る際、単なるURLだけでは情報が伝わりにくく、ユーザーのクリックを促しにくいことがあります。そこで活用したいのが です。OGPは、Webページの内容をSNSなどで魅力的に表示させるためのメタデータで、これを利用することで、リンクをとして表示できるようになります。この記事では、OGPデータを取得して記事内のリンクを自動的にリッチなリンクカードに変換するJavaScriptコードとその仕組み、そしてその見た目を整えるCSSについて解説します。この記事ではNext.jsのApp routerを使って下記のようなリンクカードを作る方法をご紹介します!OGP(Open Graph Protocol)を使ってブログ記事のリンクをカード形式で表示することには、以下のような効能があります。リンクカードはタイトル・説明・画像がまとまって表示されるため、テキストリンクよりも目立ち、ユーザーの興味を引きやすくなります。画像や説明文があることで、リンク先の内容が直感的に伝わり、クリックされやすくなります。OGP情報が正しく設定されていれば、TwitterやFacebookなどSNSでシェアされた際にも美しいカード形式で表示され、拡散効果が高まります。リンクカードはデザイン的にも整って見えるため、サイト全体の信頼感やプロフェッショナル感がアップします。ブラキオではこのようにヘッドレスCMSから取得した記事をカスタマイズすることも可能今回ご紹介するリンクカードの自動生成は、主に以下の2つのJavaScriptコードと、その見た目を定義するCSSによって実現されます。まず、外部サイトのOGP情報を取得するための関数から見ていきましょう。この関数は、指定されたURLにアクセスし、そのページのHTMLからOGP関連のメタデータを抽出します。次に、実際の記事本文を解析し、OGPデータを利用してリンクカードを生成するReactフックを見ていきましょう。最後に、生成されたリンクカードを美しく表示するためのCSSを見ていきましょう。このCSSは、リンクカード全体のレイアウト、画像(サムネイル)、テキストの表示方法などを定義しています。この記事で紹介したと、そして関連するCSSを組み合わせることで、することができます。これにより、ブログ記事やWebサイトの視認性が向上し、ユーザーが外部サイトのコンテンツを理解しやすくなり、クリック率の向上にも繋がるでしょう。ご自身のサイトにこの機能を組み込んで、より魅力的なコンテンツ表示を実現してみてはいかがでしょうか。
2025.06.14
なぜJamstackはセキュアと言われるのか?WordPressとの比較と対策
近年注目を集めるウェブサイト構築アーキテクチャ「Jamstack」。その特徴の一つとして、高いセキュリティ性が挙げられます。本記事では、Jamstackがセキュリティに優れる理由を解説し、広く利用されているWordPressと比較しながら、具体的な対策についても掘り下げていきます。Jamstackが従来のアーキテクチャと比較してセキュリティが高いと言われる主な要因は、以下の点に集約されます。WordPressは非常に普及しているCMSであるため、常に攻撃者の標的となりやすい状況にあります。プラグインやテーマの脆弱性、本体のアップデート遅延、サーバー設定の不備などがセキュリティインシデントの原因となる可能性があります。SQLインジェクションやPHPの脆弱性を利用した攻撃も懸念されます。一方、Jamstackは静的ファイルが中心であるため、これらの攻撃経路は基本的に存在しません。動的な処理はAPIに依存しますが、適切に選定・管理されたAPIサービスを利用することで、ウェブサーバー自体の脆弱性リスクを低減できます。ただし、Jamstackも完全に安全ではありません。利用するAPIサービスのセキュリティ、フロントエンドのJavaScriptコードの脆弱性、ビルドプロセスのセキュリティなどが新たなリスクとなる可能性があります。重要なのは、それぞれのアーキテクチャの特性を理解し、適切なセキュリティ対策を講じることです。Jamstackアーキテクチャは、その特性から従来の動的なウェブサイトと比較してセキュリティが高いと考えられていますが、完全に改竄のリスクがないわけではありません。ここでは、Jamstackサイトが改竄される主な経路と、それに対する具体的な対策を掘り下げて解説します。Jamstackサイトでは、フォームの送信、認証、Eコマース機能、検索など、動的な処理を外部のAPIサービスに依存するケースが多くあります。これらのAPIサービスにセキュリティ上の脆弱性があった場合、そこを足がかりに不正アクセスが行われ、データが改竄されたり、悪意のあるコンテンツが挿入されたりする可能性があります。Jamstackサイトのインタラクティブな要素は、主にJavaScriptによって実現されます。もしJavaScriptコードにセキュリティ上の欠陥(脆弱性)があった場合、クロスサイトスクリプティング(XSS)などの攻撃を受ける可能性があります。XSS攻撃を受けると、悪意のあるスクリプトがユーザーのブラウザ上で実行され、Cookieやセッション情報が盗まれたり、サイトの表示が改竄されたりする可能性があります。Jamstackサイトは、通常、静的サイトジェネレーター(SSG)などを用いて、ソースコードから静的なファイルを生成するビルドプロセスを経ます。もしこのビルドプロセスが侵害された場合、生成された静的ファイルに悪意のあるコードが埋め込まれる可能性があります。Jamstackサイトの静的ファイルは、通常CDN(コンテンツ配信ネットワーク)を通じて配信されます。もしCDNのアカウントが不正にアクセスされた場合、配信されている静的ファイルが改竄され、サイトの見た目が変わったり、悪意のあるコンテンツが表示されたりする可能性があります。開発者のPCや開発環境がマルウェアに感染した場合、意図しないコードがリポジトリにコミットされ、それがデプロイされてしまう可能性があります。これらの対策を講じることで、Jamstackサイトのセキュリティレベルを大幅に向上させ、改竄のリスクを低減することができます。Jamstackの特性を理解した上で、多角的なセキュリティ対策を実践していくことが重要です。
2025.05.08
Jamstack開発の下請けをお探しですか?ブラキオがあなたの強力なパートナーに
Web制作の世界は常に進化しており、新しい技術が次々と登場しています。その中でもJamstackは、より高速でセキュア、そしてスケーラブルなウェブサイトを実現するための革新的なアプローチとして注目を集めています。しかし、新技術の導入は不安や挑戦を伴うもの。そんな時、ブラキオがパートナーとして、皆さんのJamstackにおける挑戦を全力でサポートします。ブラキオは、フロントエンド開発における豊富な実績を持ち、Jamstack開発においても皆さんをテックリードとして支援できます。コーポレートサイトからwebサービスまで、あらゆるフロントエンド開発のお手伝いをします。また、コーディングだけのお仕事も大歓迎です。プロジェクトの成功は、良いコミュニケーションから始まります。ZoomでのオンラインMTGや、Slackなどのチャットツールを通じて、いつでも柔軟に対応させていただきます。まずはお問合せいただければ、お見積もりを含め、具体的なご提案をさせていただきます。Jamstackでのウェブサイト制作は、多くの可能性を秘めています。ブラキオと一緒に、新たな挑戦に踏み出しませんか?あなたのビジョンを現実のものとするために、全力でサポートさせていただきます。
2024.04.10
Next.jsにおけるページ内スクロールの実装ガイド
Next.jsを使用したウェブサイトで、ページ内スクロールを実現したいと思ったことはありませんか?例えば、ウェブサイトのナビゲーションバーに「SERVICE」や「ABOUT」のようなリンクがあり、ユーザーがそれらをクリックすると、ページ内の対応するセクションに自動的にスクロールするといった機能です。弊社の上部にあるメニューがこのページ内スクロールを実装しています。よろしければ試してみてくださいね。まずは、実際に試してみて、その振る舞いを体験してみましょう。このような機能を簡単に実装するためには、というライブラリを利用するのがおすすめです。まずは以下のコマンドでインストールしましょう。そして、以下のように呼び出して使用します。ここでのimport文では、という形でエイリアスを設定しています。これは、という名前がNext.jsの と名前が重複してしまい、混乱を避けるためです。そして、メニューリンクからスクロールさせたい要素への移動を設定するために、その要素にのようなIDを指定します。これにより、ページ内スクロールを簡単に実装することが可能となります。以上がNext.jsでのページ内スクロール実装の基本的な手順です。この方法を試して、ウェブサイトのナビゲーション体験をより良いものにしましょう。
2023.05.14