created: 2020-11-20T09:50:25.000Z

nextjsのSSGでhtmlでredirect

nextjsのSSGでブログを作っているが、技術系以外の記事もこのブログで管理したくなったので今ある技術系の記事を /tech 配下のパスにもってきたいということになった。

301でリダイレクトできればいいのだが、サーバはSSGで生成したhtmlをサーブしているだけだし、そこまでSEO的なページランクが惜しいわけでもないのでもう meta refresh でいいかなということにした。

MetaRefreshRedirect

meta refresh をしてくれる react コンポーネント次のようになった。

import React from "react";
import Head from "next/head";

export const MetaRefreshRedirect: React.FC<{ url: string }> = ({ url }) => (
  <Head>
    <link rel="canonical" href={url} />
    <meta httpEquiv="Refresh" content={`0; URL=${url}`}></meta>
  </Head>
);

Head

nextjsではヘッダにタグを入れたいときは Head コンポーネントを使う。

nextでは自動的に有象無象のjsファイルをhead内でロードしてくれるが、そこに触らないで済むためのコンポーネント。

meta/httpEquiv="Refresh"

本当は301リダイレクトのほうがいいのだが、html内にこれを書くとブラウザが指示したページに遷移してくれる。

link rel="canonical"

本来はサイト内に違うURLで同じページがある場合に使うタグだが、つけておくとよいという記事を見つけたのでつけた。かなり古い記事なので実際は分からないが、「このページの本来のURLはここだよ!」という意味付けができるのは意図とあっている。