EmDashでデザイン・フォーム・SEOを作り直す手順|移行後の仕上げ
連載「WordPressからEmDashへ移行する」の第4回です。第3回で記事を取り込んだサイトを、本番に切り替える前に、元のWordPressと同じ水準まで仕上げます。直すのは、見た目、URL、お問い合わせフォーム、画像の重さ、SEOの5つです。
WordPressのテーマやプラグインの機能は、EmDashには移りません。移らなかったものを1つずつ見つけて、代わりを用意する作業です。
コードの変更はすべてClaude Code(パソコンの中でコマンドを打ったりファイルを書き換えたりしてくれるAI)に頼みました。人が操作したのは、フォームの作成、ロボット判定のキーの設定、送信テストだけです。
✅ この記事で解決できること
- 移行した記事のボックスの色が消える理由と、直し方がわかる
- WordPressと同じURLのまま表示できるようにする方法がわかる
- Contact Form 7の代わりに、EmDash公式のFormsプラグインでお問い合わせフォームを作れる
- エラーなしで画像が縮小されていない落とし穴に気づける
- GA・OGP・サイトマップなど、SEOの点検項目がわかる
- 所要時間:デザインの作り直しは約1時間半(Claude Codeの作業)。フォームとSEOは記録なし
🎯 こんな人に最適です
- 第3回までで、WordPressの記事をEmDashに取り込んだ人
- WordPressのテーマやプラグインで作っていた機能を、移行後どうするか迷っている人
- コードの変更をAI(Claude Code)に任せながら進めたい人
🔧 必要な環境・前提
- EmDash 1.4.0(第2回で立ち上げ、第3回で記事を取り込んだもの)
- Formsプラグイン @emdash-cms/plugin-forms 0.2.12
- Cloudflare Workers Paid(第3回で切り替え)
- Claude Code(コードの変更役)
- 検証日:2026年10月30〜31日
⚠️ 先に第3回までを済ませてください
記事の取り込みがまだの人は、先に 第3回「WordPressの記事をEmDashに移す手順」 を済ませてください。この回の作業は、本番のドメインを切り替える前に、仮アドレス(workers.dev)のサイトで行います。
📋 作業全体の流れ
- 手順1:デザインを作り直す
- 手順2:記事のボックスとURLを元に戻す
- 手順3:お問い合わせフォームを作る
- 手順4:ロボット判定(Turnstile)を設定して、ページに入れる
- 手順5:送信テストをする
- 手順6:カード画像を軽くする
- 手順7:GA・OGP・サイトマップを点検する

この記事で出てくる言葉
| 言葉 | 意味 |
|---|---|
| スラッグ | URLの末尾の部分(例:/claude-freee-invoice/ の claude-freee-invoice) |
| 転送(リダイレクト) | 古いURLに来た人を、新しいURLに自動で案内すること |
| プラグイン | あとから足す機能。EmDashにも公式のプラグインがある |
| Turnstile | Cloudflareのロボット判定。「私はロボットではありません」の代わりになる |
| キャッシュ | 一度作った表示を取っておき、使い回すしくみ |
| OGP | SNSで共有したときに出る画像やタイトル |
| canonical | 「このページの正式なURLはこれ」と検索エンジンに伝える印 |
| noindex | 「このページは検索結果に出さないで」という印 |
| サイトマップ | 検索エンジン向けのページの一覧 |
手順1:デザインを作り直す
第2回で選んだテンプレート(サイトのひな形)は、黒が基調の英語のブログでした。これを土台に、今のサイトのスクショを見本にして、Claude Codeに作り直してもらいました。WordPressのテーマのファイルは使っていません。
筆者がClaude Codeに伝えた方針を、頼み方の形にすると次のようになります(実際に打った文そのものではありません)。
今のサイトのスクショを見本に、テンプレートを白基調・青のデザインに作り直して。メニュー・トップ・カテゴリー一覧はコードで固定して、記事の中身からは変えられないようにして
できあがったのは、次のような作りです。
- 共通:白が基調で青(#0065DE)。ロゴと6項目のメニュー、グレーのフッター。スマホではメニューを折りたたみます。
- トップ:背景画像と検索ボックス、サイトの考え方、カテゴリー3つ、新着マニュアル9件
- 記事ページ:白いカードと右のサイドバー(検索、最近の投稿、カテゴリー)
- カテゴリー・タグ・記事一覧:カードの3列表示
- 検索ページと「見つかりません」のページを日本語にしました。
- テンプレートにあった読了時間やダークモードの切り替えは消しました。


Claude Codeの作業は約1時間半でした。人の操作はありません。
手順2:記事のボックスとURLを元に戻す
手順2-1:ボックスの色と枠を戻す
第3回で見つかったとおり、取り込んだ記事の「✅ この記事で解決できること」などのボックスは、文章は残っているのに、色と枠が消えていました。
そこで、記事のHTMLを表示する部品を作り直してもらいました。style だけは残し、スクリプトなどの危険なものは、これまでどおり消します。表の罫線も消えていたので、EmDashの表の部品に合わせて見た目の設定(CSS)を足しました。


手順2-2:URLをWordPressと同じにする
テンプレートの記事のURLは /posts/記事名 でした。WordPressは /記事名/ です。このままだと、検索結果やSNSに残っている古いURLが「見つかりません」になります。
/記事名/で記事を表示するページを作りました。/posts/記事名に来た人は、/記事名/に転送します。- あとで、コンテンツタイプ(記事の種類)の設定にあるURLの形も
/posts/{slug}から/{slug}/に直しました。こうしないと、サイトマップやMCPが返すURLが古い形のままになります。
手順2-3:日本語のURLを表示できるようにする
お問い合わせページと、日本語のタグ62件が「見つかりません」になりました。
手順2-4:古いURLを全部確かめる
旧サイトのURL 129件(投稿32、固定ページ3、カテゴリー4、タグ90)を、新しいサイトで1件ずつ開いてもらいました。結果は、129件すべて表示できました。
なお、出し直した(デプロイした)直後に、古い表示や「見つかりません」が残ることがありました。Cloudflareのキャッシュが原因で、数分で直りました。
手順3:お問い合わせフォームを作る
旧サイトは、WordPressのプラグイン「Contact Form 7」でフォームを作っていました。EmDashには中身が移らず、本文に [contact-form-7 …] という文字がそのまま残りました。
調べると、EmDash公式の「Formsプラグイン」がありました。管理画面でフォームを作れて、送信内容は管理画面に保存されます。ロボット判定(Turnstile)と通知メールにも対応しています。自分で作るのをやめて、これを使いました。
手順3-1:プラグインを入れる(Claude Code)
Claude Codeが次の作業をしました。
npm install @emdash-cms/plugin-forms- 設定ファイル
astro.config.mjsのプラグインの欄に、formsPlugin({ defaultSpamProtection: "turnstile" })を足しました。スパム対策の初期値を、Turnstileにする設定です。 - フォーム用の見た目を読み込み、送信ボタンを旧サイトと同じ青にしました。
- 出し直しました(デプロイ)。
手順3-2:管理画面でフォームを作る
ここからは人が操作します。管理画面は英語表示です。
- 左メニューの「プラグイン」の下に「Forms」と「Submissions」が増えています。「Forms」を開きます。
- 「No forms yet」と表示されます。右上の「New Form」を押します。

- 「Name」に「お問い合わせ」、「Slug」に「contact」を入れます。
- 「Add Field」で項目を足します。

作った項目は4つです。
- 氏名(text、必須)
- メールアドレス(email、必須)
- 題名(text、必須)
- メッセージ本文(textarea、任意)

- 「Create Form」を押します。
- 一覧に「お問い合わせ / contact / active」と表示されれば完成です。

Settingsの初期値は英語(「Thank you for your submission.」「Submit」)です。筆者は最終的に、送信ボタンを「送信」に、完了メッセージを「お問い合わせありがとうございます。内容を確認のうえ、ご連絡いたします。」にしました。
手順4:ロボット判定(Turnstile)を設定して、ページに入れる
⚠️ キーを入れるまで、送信は必ず失敗します
スパム対策をTurnstileにすると、キーを入れるまでは送信が必ず失敗します(「Turnstile is not configured」)。フォームを作ったら、続けてキーを設定してください。
手順4-1:Cloudflareでウィジェットを作る
- Cloudflareのダッシュボード(管理画面)で「Application security」→「Turnstile」を開きます。
- 「Add widget manually」と「Set up with Spin」(AIに任せる新しい機能)の2つが出ます。筆者は「Add widget manually」でウィジェットを作りました。
- 作ると、サイトキーとシークレットキーが表示されます。

手順4-2:EmDashにキーを入れる
- EmDashの管理画面で、「管理者」→「プラグイン」を開きます。
- emdash-formsの設定を開きます。
- 「Turnstile Site Key」と「Turnstile Secret Key」に、手順4-1のキーを入れます。
- 「設定を保存」を押します。

⚠️ キーは貼らない
シークレットキーは秘密の値です。AIとのチャットやブログ、スクショに載せないでください。筆者も、キーは自分で管理画面に入力しました。
手順4-3:お問い合わせページにフォームを入れて公開する
- 管理画面で「Pages」→「お問い合わせ」を開きます。
- 本文で「/」を入力してコマンドを出し、「Form」を選びます。
- 「Formを挿入」の画面で「お問い合わせ」を選び、「Insert」を押します。

- 本文にFormのブロックが入ります。
- 右上の「今すぐ公開」を押します。

手順5:送信テストをする
手順5-1:AIが操作するブラウザでは送れない
最初に、Claudeが操作するアプリ内のブラウザ(自動で操作するブラウザ)でテストしました。Turnstileが「検証に失敗しました」になり、送信すると「Something went wrong. Please try again.」と出ました。管理画面に保存された件数は0件のままです。

手順5-2:普段のブラウザで送る
- 普段使っているブラウザで、お問い合わせページを開きます。
- 項目を入れて「送信」を押します。
- Turnstileに「成功しました!」、その下に「お問い合わせありがとうございます。…」と表示されれば成功です。

送信の内容は、管理画面の「Submissions」に保存されていました。
通知メール(送信があったときに自分に届くメール)は、この時点では設定できませんでした。Forms 0.2.12の管理画面には、通知先を入れる欄がありません。また、メールを送るしくみ(Cloudflare Email Sending)も必要です。第5回で、ドメインを切り替えるときに設定しました。それまでは「Submissions」で確認します。
手順6:カード画像を軽くする
トップや記事一覧のカード画像が、元の大きさのまま届いていました。最大で幅1600px、1枚約1MBです。画像を小さく表示する指定(width={480})を書いても、縮小されていませんでした。
原因は2つありました。どちらもClaude Codeが直しました。
- 原因1:EmDashの画像の部品は、幅と高さの両方がわからないと縮小しません。WordPressから来たアイキャッチには、高さの情報がありませんでした。高さ(
height={270}、16:9)を足しました。 - 原因2:縮小してよい画像のアドレスの一覧(
image.remotePatterns)が空でした。
設定ファイル astro.config.mjs に、仮アドレスと本番のアドレスの2つを手で足しました。範囲は、EmDashの画像の置き場所(/_emdash/api/media/file/)だけに限っています。
image: {
remotePatterns: ["<Worker名>.<名前>.workers.dev", "manual-chang.com"].map((hostname) => ({
protocol: "https",
hostname,
pathname: "/_emdash/api/media/file/**",
})),
},結果、トップの9枚の合計は、2.76MBから84KBになりました(約33分の1)。形式もWebP(軽い画像の形式)になりました。初回だけ縮小した画像を作るので少し遅いですが、2回目からはキャッシュで速くなります。
縮小は、Cloudflare Imagesの「変換」として数えられます。無料枠は月5,000種類なので、記事が約35本なら余裕があります。
手順7:GA・OGP・サイトマップを点検する
最後に、Claude CodeにSEOまわりを点検してもらいました。見つかったことと、直したことは次のとおりです。
| 項目 | 見つかったこと | 直したこと |
|---|---|---|
| Googleアナリティクス | 旧サイトはSite Kit(WordPressのプラグイン)がタグを出していた。新サイトには無かった | 同じタグを、manual-chang.comで表示されたときだけ出す(テストでの閲覧を数えないため) |
| Search Console | Site Kitがファイルやメタタグで所有者を確認していた。WordPressをやめると確認が切れる | 第5回で、DNSを使う「ドメイン」方式で確認し直した |
| 説明文 | SEO PACKの説明文が移っていない。32記事のうち、SEO PACKの説明文あり8本、抜粋あり10本、どちらも無し14本 | 8本をEmDashのSEO欄に入れた。説明文が無い記事は、本文の冒頭120字を使う |
| OGP・canonical | 記事は出ていた。トップにはcanonicalとog:urlが無かった | canonicalが無いページは、そのページのURLをcanonicalにする |
| サイトマップ | 中のURLが /posts/〇〇 の古い形。旧 /feed/ と /wp-sitemap.xml は「見つかりません」 | URLの形を直した。/feed/ は /rss.xml、/wp-sitemap.xml は /sitemap.xml に転送 |
| 仮アドレス | workers.devのサイトが検索に拾われると、同じ内容が2つになる | manual-chang.com以外では noindex, nofollow にする ※旧トップ用の固定ページ「home」も noindex にした |
直したあと、説明文、検索エンジン向けの設定、canonical、転送、サイトマップ(記事32件と固定ページ2件)を確かめました。旧URL 129件も、すべて表示できるままでした。
うまくいかないときは
| 症状 | 原因 | 対処 |
|---|---|---|
| 移行した記事のボックスの色・枠が消える | EmDashがHTMLのstyleを消して表示する | 表示用の部品で、styleだけ残す(危険なものは消したまま) |
| 記事のURLが /posts/記事名 になる | テンプレートの初期設定 | /記事名/ のページを作り、/posts/ は転送。コンテンツタイプのURLの形も /{slug}/ に |
| 日本語URLのページやタグが「見つかりません」 | WordPressで変換されたスラッグのまま取り込まれた | 両方の形で探す。スラッグを日本語に直す |
| 本文に [contact-form-7 …] の文字が出る | WordPressのプラグインの機能は移らない | EmDash公式のFormsプラグインで作り直す |
| フォームの送信が必ず失敗する | Turnstileのキーが入っていない | Formsの設定に、サイトキーとシークレットキーを入れる |
| ページにフォームを入れたのに表示されない | 「保存」だけで、下書き版のまま | 右上の「今すぐ公開」を押す |
| AIが操作するブラウザで「検証に失敗しました」 | ロボット判定が正しく働いている | 送信テストは、人が普段のブラウザで行う |
| カード画像が重い(縮小されない) | 高さの情報が無い。縮小してよいアドレスの一覧が空 | 高さを指定し、image.remotePatterns にサイトのアドレスを足す ※エラーは出ないので、画像の大きさを実際に測って確かめる |
| 出し直した直後に古い表示や「見つかりません」 | Cloudflareのキャッシュ | 数分待つ |
まとめ
- WordPressのテーマやプラグインの機能は移りません。移らなかったものを見つけて、1つずつ代わりを用意します。
- メニューやトップページはコードで固定すると、AIが記事を書いても骨組みが崩れません。
- 移行した記事のボックスは、styleを残す表示用の部品で元の色に戻せます。
- URLはWordPressと同じ /記事名/ にそろえ、古いURLを全部開いて確かめます。
- お問い合わせフォームは、EmDash公式のFormsプラグインとTurnstileで作れます。送信テストは人が普段のブラウザで行います。
- 画像が縮小されていなくてもエラーは出ません。実際の大きさを測って確かめます。
この回の終わりの時点で、仮アドレスのサイトは、見た目・URL・フォーム・SEOまで元のWordPressと同じ水準になりました。本番のmanual-chang.comは、まだ古いWordPressのままです。
次回は、第5回「ドメインをCloudflareに切り替える手順|EmDash移行の仕上げ」です。ネームサーバーの変更、パスキーの登録し直し、フォームの通知メールの設定を扱います。



