いまご覧のサイトを、URLを1つも失わずにNext.jsからRustへ移行
envixo.comは99言語で公開しています。Next.jsからRustへ書き換え、切り替え前にすべてのURLを旧サイトと比較しました。あわせて、検索エンジン、右から左へ書く言語、AIアシスタントに対して旧サイトが取りこぼしていた点も直しています。
- クライアント
- Envixo
- プラットフォーム
- ウェブ
- 業界
- マーケティングサイト
- リリース
- 2026
課題
Next.jsのサイトは問題なく動いていましたが、512 MBのメモリを確保したNode.jsサーバーが必要で、1ページあたり約150 KBのHTMLを送信していました。さらに、右から左へ書く言語のレイアウトがなく、構造化データはJavaScriptでしか追加されていませんでした。
開発したもの
axumとAskamaを使ったRustサーバーが、同じURL、同じ99の言語ファイル、同じデザインを配信します。TailwindとプレーンなJavaScriptで構築しました。
同じURLとリダイレクト
言語判定、言語プレフィックス、末尾のスラッシュ、言語Cookieは旧サイトと同じ挙動です。そのためリンクも検索順位も失っていません。
まずSEO同等、そして改善
メタデータ、hreflang、JSON-LD、サイトマップは旧サイトと一致させ、SNS共有タグの不具合を修正し、llms.txtを新設しました。
差分ゼロを条件にした関門
専用ツールで旧サイトと新サイトのすべてのURLを比較しました。切り替えの条件は差分ゼロ。加えて英語、アラビア語、日本語で3つの画面幅のスクリーンショットも確認しています。
3Dで見る
ランディングページ全体をthree.jsでガイド付きに巡るツアー。3Dが使えない場合はシンプルな一覧を表示します。
SDKを使わないお問い合わせフォーム
Cloudflare Turnstileでスパムを判定し、メールはAmazon SESで送信します。リクエストは自前で署名し、ハニーポットと訪問者ごとの上限も設けています。
エラーは通知、キーは安全に
サーバーとブラウザのエラーはHoneybadgerへ送られ、APIキーがページに出ることはありません。
エンジニアリングの成果
メモリは2026年10月に本番環境で計測。イメージのサイズはビルドの値です。サイトマップのURL数は自動テストで検証しています。
- 切り戻しはDNSで。旧サイトは7日間そのまま残しました
- 依存関係の更新は、テストとイメージのビルドが通れば自動でマージ
- テストとビルドはEnvixo自社のCIランナーで実行
- 以前と同じ言語ファイルから99言語で公開
技術
- Rust
- axum
- Askama
- Tailwind CSS
- three.js
- Amazon SES
- Cloudflare Turnstile
- Kubernetes