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サイトの視認性が向上し、ユーザーが外部サイトのコンテンツを理解しやすくなり、クリック率の向上にも繋がるでしょう。
ご自身のサイトにこの機能を組み込んで、より魅力的なコンテンツ表示を実現してみてはいかがでしょうか。
この記事をシェアする
最近の投稿

Web担当を任されたら、一度で覚えようとしなくていい。元インストラクターが教えるときに気をつけていた4つのこと
社長から急にWeb担当を任された。パソコンは使えるけれど、サイトの更新なんてやったことがない。何から始めればいいか分からないまま、時間だけが過ぎていく。結論から言うと、一度で全部覚えようとしなくて大丈夫です。私は以前、パソコンスクールでインストラクターをしていました。どれだけ丁寧に教えても、伝わるのは3割ほどでした。一度で分からないのは、当たり前のことです。この記事では、インストラクター時代に気をつけていた4つのことをもとに、Web担当になった人の学び方を紹介します。メールを送ったり、Excelで表を作ったりはできる。でも、サイトの仕組みや、更新に使う管理画面(CMS)は、ほとんど触ったことがない。そんな状態で、社長から急にWeb担当を任される。何から手をつければいいか分からないまま、サイトの更新が止まります。上司に進み具合を聞かれても、うまく答えられません。本やYouTube、ネットの記事で独学する方法もあります。自分で調べながら進められる人なら、それで十分です。ただ、誰もが調べものを得意としているわけではありません。独学では手が止まってしまう人もいます。この記事は、そういう人に向けて書いています。パソコンの基本操作はできる人を前提にしています。教える側にいたころの実感として、どれだけ丁寧に説明しても、受講生に伝わるのは3割ほどでした。だから、一度で分からなくて当たり前です。1回で全部を覚えられなくても、落ち込む必要はありません。それよりも、次の2つを続けることが大事だと考えています。Web担当がやることは、主に次の4つです。全部を一度にできるようになる必要はありません。最初の目標は、日々の更新を自分でできるようになることです。CMSの操作手順や、ChatGPTの具体的な使い方は、本記事では扱いません。私は15年ほど前、Web・Office・プログラミングを教えるスクールで、3〜4年インストラクターをしていました。受講生の多くは、未経験からパソコンの仕事に就きたい人です。年齢は25〜30歳くらいが中心でした。そのころ気をつけていたのが、次の4つです。たとえば、HTMLの基本である、リンクを作る「aタグ」を説明したとします。説明のあとで課題に取り組んでもらうと、分かっていなかったことが出てきました。しばらく受講を休んでいた人は、前に習ったことをかなり忘れていました。どれだけ上手に教えても、伝わるのは3割ほど。教える側として、いつもそう考えていました。教える側の知識が多いほど、伝わることも増える。そう考えて、本をよく読みました。副業でWeb制作もしていたので、仕事の現場の話も伝えられました。専門用語は、なるべく使わないようにしていました。代わりに、身近なものに例えて説明します。たとえば、画像の置き場所の書き方には「絶対パス」と「相対パス」の2種類があります。私はこう例えていました。自分の家にあるテレビの話をするのに、住所から言う人はいません。家の中のものなら「うちのテレビ」で通じます。同じサイトの中にある画像なら、相対パスで足ります。一方、他の人の家にあるものは、家の中のことが分からないので、住所から伝える必要があります。別のサイトにある画像を使うなら、絶対パスが必要です。授業の最初には、「今日は何を学んで、何ができるようになるか」を伝えていました。忘れられない受講生がいます。シフトの都合で、助っ人として別の校舎に行っていたときのことです。その校舎では、卒業課題として、受講生が0からサイトを作っていました。その中に、かなり煮詰まっている受講生がいました。私は、仕事の現場の話を交えながら助言しました。ときには、具体的な提案もしました。就職したあとの上司役のつもりで関わりました。受講生はそのやり方を気に入ってくれて、本人の希望で、私のいる校舎に移ってきました。そこでサイトを仕上げ、卒業していきました。数か月後、私はすでにスクールを辞めていましたが、SNSのメッセージで連絡が届きました。「無事に就職できました!先生のおかげです」とてもうれしかったのを、今でも覚えています。手が止まっていても、実務を知っている人に聞ければ、前に進めます。教える側で気をつけていたことは、学ぶ側にも使えます。独学で進めるなら、次の4つを試してみてください。ブラキオでは、社内のWeb担当者を育てる「社内Web担当者育成プログラム」を用意しています。インストラクター時代に気をつけていた4つは、この研修でも次のように生かします。決まった教科書はありません。最初のヒアリングで困っていることを聞き、その会社に合わせたカリキュラムを作ります。研修はオンラインで、60分×6回、対象は1名です。画面共有で、同じ画面を見ながら進めます。扱う内容は次のとおりです。前提として、今のサイトに更新機能(CMS)があることが必要です。Web担当を任されても、一度で全部覚えなくて大丈夫です。伝わるのは3割ほど。今日できることを1つ決めて、少しずつ増やしていけば十分です。独学で手が止まったら、聞ける相手を頼ってください。社内に聞ける人がいなければ、ブラキオの研修も選択肢の1つです。内容と料金は、にまとめています。社内に担当者を置くのが難しい場合は、Webの運用をまるごとブラキオに任せることもできます。
2026.11.10

テンプレート制作とフルオーダー、どちらを選ぶ? 見た目より大事なのは、中身と更新を続けること
ホームページを作り直したい。でも、安いテンプレートで作ると、他社と同じ見た目にならないか心配。かといって、オーダーメイドは費用も時間もかかりそう。結論から言うと、テンプレートでも見た目は会社ごとに変えられます。一から作り込みたいなら、フルオーダーを選べばいい。ただ、どちらを選んでも、見た目以上に大事なのは中身と、更新を続けることです。この記事では、ブラキオのテンプレート制作とフルオーダーの違いと、選び方を紹介します。作り直しを考えるとき、次の2つの間で迷っていないでしょうか。どちらにも不安があり、そもそも何がどう違うのかも分からない。決められないまま、作り直しが先延ばしになってしまいます。見た目は大事です。ただ、テンプレートでも見た目は会社ごとに変えられます。一から作り込みたいなら、フルオーダーを選べば大丈夫です。それ以上に大事なのは、ホームページの中身と、公開後に更新を続けることだと、ブラキオは考えています。ブラキオが保守を担当している会社では、検索で見つけてもらう工夫と、問い合わせフォームの見直しを続けました。その結果、それまで0件だった問い合わせが、3か月で5件届くようになりました。問い合わせにつながったのは、公開後も中身に手を入れ続けたことだと考えています。ブラキオの2つの作り方を、5つの点で比べます。テンプレートで共通なのは、ページの土台となる構造です。配色、写真、文章、見せ方は、会社ごとに変えます。デザインは、AIのデザインツールで複数の案を出し、その中から会社に合うものを作り込みます。見た目を変えても、性能は変わらない作りにしています。変更のたびに、見た目が意図せず崩れていないか(VRT)、表示が遅くなっていないか(Lighthouse)を、機械が自動で確かめています。ブラキオ自身のホームページと、このプランの紹介ページも、このテンプレートで作っています。他社の制作料金との比較や、自動チェックの設定方法は、本記事では扱いません。見やすさ、独自性、ターゲットに合わせたデザイン、ブランディング。この4つでは、テンプレートよりフルオーダーの方が優れています。フルオーダーは、次のように進めます。デザインの合意を取るところに一番時間がかかり、納品までは2〜3か月が目安です。文章をライターに依頼することもできます。次のような会社には、フルオーダーが向いています。反対に、次のような会社には、テンプレート制作が向いています。テンプレートでも、見た目は会社ごとに変えられます。一から作り込みたいなら、フルオーダーを選べば大丈夫です。どちらを選んでも、一番大事なのは、公開後に中身を足し、更新を続けることです。2つの作り方の料金や内容は、で比べられます。どちらが合うか迷ったら、そこからご相談ください。
2026.11.10

原稿も写真も、そろっていなくていい。ホームページの相談前に決めておくのは「誰に」「何のために」だけ
ホームページを集客に使いたい。でも、何を載せればいいか分からないし、原稿も写真もない。そろえてから相談しようと思っているうちに、時間だけが過ぎていく。結論から言うと、原稿も写真も要件も、そろっていなくて構いません。決めておくのは「誰に」「何のために」だけです。この記事では、原稿や写真がない状態から、ブラキオがどうやってホームページを形にしているかを紹介します。ホームページが大事だとは分かっている。サイトもすでにある。けれど、集客にどう使えばいいかが分からない。そんな状態で、次のように考えていないでしょうか。そう考えているうちに、相談は先延ばしになります。その間も、集客に使えないままのサイトが置かれ続けます。相談の前に決めておくのは、次の2つだけです。ブラキオが相談の最初に必ず確認するのも、この2つです。原稿、写真、ページの構成は、相談しながら一緒に用意していきます。あるお客さんの手元にあったのは、自分で描いた大まかなラフ案だけでした。原稿も、整理された要件もない状態です。ブラキオは、次のものを材料にして、AIでデザインと文章の下書きを作りました。下書きを添削するときに気をつけたのは、AIっぽさを消すことです。お客さんからは「デザインとして悪くない」という反応をいただきました。ブラキオの制作+運用プラン(初期費用98,000円+月額29,800円)では、次のように進めます。最初に「誰に」「何のために」を確認します。ページの構成は、ブラキオのテンプレート(標準の構成)を枠組みにします。標準の構成は、トップ、サービス、会社情報、実績、お知らせ、お問い合わせの6ページです。そこに入れる文章や情報は、お客さんからもらうか、話を聞きながら引き出していきます。文章は、ヒアリングの内容をもとにAIで下書きを作ります。その下書きを、お客さんと相談しながら添削してもらいます。運用・保守の案件では、AIで文章を作ることをすでに何度も行っています。文章をプロのライターに書いてほしい場合は、個別見積もりのフルオーダーで、ライターに依頼することもできます。写真がない場合は、基本的にブラキオが画像サイトなどで購入して用意します。使っているAIツールの名前や使い方は、本記事では扱いません。原稿も写真も要件も、そろっていなくて構いません。決めておくのは「誰に」「何のために」だけです。この2つがまだはっきりしなくても、相談の中で一緒に言葉にしていけます。何を頼めばいいか分からない段階でも大丈夫です。から、今のホームページで困っていることをそのまま聞かせてください。
2026.11.10

前の制作会社が対応してくれなくても、ホームページは乗り換えられる。ブラキオが引き継ぎで最初に確認すること
前の制作会社に住所変更を頼んでも、返事がない。乗り換えたいけれど、何から手を付ければいいか分からない。結論から言うと、前の制作会社が対応してくれなくても、ホームページは乗り換えられます。この記事では、ブラキオが他社の作ったサイトを引き継いだ3社の事例と、引き継ぐときに最初に確認していることを紹介します。乗り換えの相談でよく聞くのは、次のような話です。頼みたいことがあるのに、制作会社やフリーランスが動いてくれない。それなら別の会社に乗り換えたい。けれど、何をどう進めればいいか分からず、そのままになってしまう。動けないうちにも、古い住所のような間違った情報がサイトに載り続けます。乗り換えには、ドメインやサーバー、ログインの情報が必要です。ただ、お客さん自身がこれらを知らないことがほとんどです。ブラキオが「こうした情報をご存じですか」と聞くと、多くの場合「制作会社に聞いてほしい」と返ってきます。その場合は、ブラキオが前の制作会社に直接連絡して、情報を受け取ります。お客さんにしてもらうのは、前の制作会社の連絡先を教えてもらうことくらいです。普段の依頼に応えてくれない会社が、引き継ぎには応じてくれるのか。そう不安に思うかもしれません。これまでブラキオが引き継いだ3社では、どの会社も引き継ぎには快く応じてくれました。地域で住宅工事を手がける会社(従業員20人ほど)のWordPressサイトです。ドメインとサーバーは、前の制作会社が契約していました。お客さんがしたのは、前の制作会社の連絡先をブラキオに伝えることだけです。ブラキオが制作会社とやり取りして、ドメインとサーバーをブラキオ側のアカウントに移しました。地域の建設会社(従業員20人ほど)のWordPressサイトで、フリーランスの方が作ったものでした。サイトは、メールや社内システムと同じサーバー契約の中に置かれていました。お客さんがしたのは、前任のフリーランスの方の連絡先を伝えることだけです。ブラキオがサイトのデータ、ログイン情報、サーバーの情報を受け取り、サーバー費用を抑えられる構成に作り替えました(Jamstack構成にして、Netlifyというサービスに載せています)。サーバー費用が浮いたことを、喜んでいただけました。社内にエンジニアがいる会社(従業員200人ほど)のサイトで、Movable Typeで作られていました。サーバーは社内で管理されていました。社内のエンジニアの方と連携して、WordPressへの移行と、元のサイトの閉鎖を一緒に進めました。解決案は、困りごとによって変わります。B社のようにサーバー費用を抑える構成にすることもあれば、C社のようにサイトを更新する仕組み(CMS)ごと移すこともあります。ドメイン移管やサーバー移転の技術的な手順は、本記事では扱いません。前の制作会社が対応してくれなくても、ホームページは乗り換えられます。ドメインやサーバーの情報が手元になくても大丈夫です。前の制作会社とのやり取りは、ブラキオが引き受けます。乗り換えたお客さんに喜ばれているのは、連絡がすぐ取れることです。サーバー費用を抑えられた例もあります。前の制作会社と連絡が取れず困っている方は、から、今困っていることをそのまま聞かせてください。
2026.11.10

ホームページの月額保守は「寝ている間も働く営業マン」を雇う費用。ブラキオが毎月やっていること
毎月ホームページの保守費を払っているのに、問い合わせは来ない。そのお金で毎月何をしてもらっているか、説明できますか。この記事では、ブラキオが月額保守で毎月やっていることを、自社でやる場合の要点と合わせて紹介します。読み終えるころには、問い合わせを増やすために毎月何をすればいいかが分かります。保守の契約内容に、次のような項目が並んでいないでしょうか。どれも、サイトを止めないために必要な作業です。ただ、これだけではサイトは「動いている」だけです。検索で見つけてもらう工夫も、問い合わせしやすくする工夫もないまま、名刺代わりのホームページが置かれ続けます。保守費を毎月払っていても、問い合わせを増やすための手は誰も打っていない。この状態では、待っていても問い合わせは増えません。AIを使えば、ホームページは安く速く作れるようになりました。作ることそのものの価値は下がってきています。これから価値を持つのは、作ったあとに成果を上げ続けるホームページだと、ブラキオは考えています。月額保守には、2つの役割があります。守りだけなら、サイトは止まりませんが、働きもしません。攻めまで続けて、はじめてホームページは営業マンとして働き始めます。夜中も休日も、検索した人に会社を紹介し、問い合わせを受け付けてくれる営業マンです。ブラキオの月額29,800円のプランは、守りと攻めの両方を含みます。最低契約期間の6か月が過ぎたあと、改善までは要らなければ、保守に絞ったライトプラン(月額9,800円)に変えることもできます。ブラキオが保守を担当している、地域で住宅工事を手がける会社の事例です。このサイトには、それまでホームページからの問い合わせがありませんでした。効いたのは、検索で見つけてもらうことと、問い合わせしやすくすることの両方を続けたことだと考えています。事例で効いた作業も含めて、月額29,800円のプランで毎月やっていることを紹介します。それぞれ、自社でやる場合に最初にやることも添えます。提携しているSEOの専門家が、次の作業を担当します。改善案をもとにサイトを直すのは、ブラキオです。この作業も月額に含みます。狙うのは「地域名+業務内容」のキーワードです。例えば「〇〇市 整骨院」のように、地域でお店や会社を探す人が検索する言葉です。SEOの専門家への依頼は、通常は成功報酬です。狙ったキーワードで検索結果の1ページ目に14日以上表示されたら、1キーワードにつき50,000円かかります。月額29,800円のプランでは、この1キーワード分を月額の中で使えます。1ページ目に入ったあとは、ご相談のうえで2つ目のキーワードにも取り組めます。:Google Search Console(Googleが無料で提供する、検索での見られ方を確認するツール)で、「地域名+業務内容」の表示回数と順位を見てみてください。対応した内容とサイトの状況は、毎月共有しています。その形として、GA4(Googleのアクセス解析ツール)とSearch Consoleで先月の数字を集計し、月初にスプレッドシートで共有する方法を、今ブラキオ自身のサイトで試しています。形が固まったら、保守先にも広げていきます。:月に1回、問い合わせ数・アクセス数・狙ったキーワードの順位の3つだけでも記録してみてください。先月と比べられるだけで、打った手が効いたかどうかが分かります。事例では、主力サービス専用の問い合わせフォームを新しく作りました。検索から来た人に、その用件専用の入口を用意した形です。問い合わせボタンの位置や、フォームの入力項目も見直します。:スマートフォンで自社のサイトを開き、問い合わせが完了するまで、自分で操作してみてください。途中で迷う場所や、面倒な入力があれば、そこが見直す場所です。お知らせや実績の追加、文言や画像の差し替えを、月3件まで代わりに行います。:実績やお知らせを、月に1件でも載せてみてください。更新が止まったサイトは、見た人に「この会社は今も営業しているのか」と思われてしまいます。表示速度の維持、セキュリティの確認、バックアップ。一般的な保守と同じ作業も、毎月行います。ライトプランは、セキュリティの確認やバックアップなどの保守に絞ったプランです。:ここは専門の知識が要る部分なので、任せた方が安心です。今の保守会社に、毎月どんな作業をしているか、一度聞いてみてください。GA4・Search Consoleの設定方法や、キーワード選びの具体的なやり方は、本記事では扱いません。今払っている保守費が、サイトを止めないことだけに使われていないか、一度確かめてみてください。問い合わせを増やすための作業が入っていなければ、そのホームページは名刺代わりのまま置かれ続けます。自社で始めるなら、Search Consoleで順位を見ること、スマートフォンで問い合わせまで操作してみることの2つが手軽です。毎月の作業を任せて、寝ている間も働く営業マンを雇いたい方は、をご覧ください。ご相談もこちらから受け付けています。
2026.11.10