あまり運のない状態で、Next.js静的サイトにファビコンを追加しようとしています。
'next/document'
のコンポーネントを使用してドキュメントをカスタマイズしてみました https://nextjs.org/docs/#custom-document
ファイルがビルドに含まれておらず、hrefが/_next/static/...
に更新されていないため、favicon.icoファイルへの直接リンクは機能しません。
画像のインポートとリンクのhrefへの追加も機能しません(コメント化された行を参照)。
import React from 'react';
import Document, { Html, Head, Main, NextScript } from 'next/document';
// import favicon from '../data/imageExports';
export default class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx);
return { ...initialProps };
}
render() {
return (
<Html>
<Head>
{/* <link rel="shortcut icon" href={favicon} /> */}
<link rel="shortcut icon" href="../images/icons/favicon.ico" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
ファビコンリンクは追加されますが、表示されません。ファイルをインポートすると機能することを期待していますが、<link rel="shortcut icon" href="[object Object]">
リンク。
誰かこれをまだやったことがありますか?
/static
フォルダを作成します。これは静的エクスポートフォルダーに追加されます。/static
フォルダーにファビコンファイルを追加します。_document.js
フォルダーに/pages/
を追加します。<link rel="shortcut icon" href="/static/favicon.ico" />
を頭に追加します。npm run build && npm run export
追伸 前の回答 のおかげで削除されました。できます!
編集:別の方法は、これを行うことですHeadをルートレイアウトにインポートし、そこにリンクを追加します。 Headに追加されたものはすべて、ドキュメントのヘッドタグに挿入されます。
import Head from 'next/head';
const Page = (props) => (
<div>
<Head>
<link rel="shortcut icon" href="/static/favicon.ico" />
</Head>
// Other layout/components
</div>
);
export default Page;
更新:
Staticディレクトリは、publicディレクトリを優先して廃止されました。 ドキュメント
したがって、コードは次のようになります
import Head from 'next/head';
const Page = (props) => (
<div>
<Head>
<link rel="shortcut icon" href="/favicon.ico" />
</Head>
// Other layout/components
</div>
);
受け入れられた答えはいいですが、あなたが変更する必要がない_document.js
ファビコンを追加する場合(head
にタグを追加する場合も同様)。
ファビコンを_app.js
の方が理にかなっています。このファイルは、ページのレイアウトまたはこのようなものを設定するためにすでに存在している可能性があります。また、Head
タグを文字どおりどこにでも追加できます( the docs を参照)
だから私は_app.js
class MyApp extends App {
render() {
const { Component, pageProps } = this.props;
return (
<Layout>
<Head>
<link rel="shortcut icon" href="/favicon.ico" />
</Head>
<Component {...pageProps} />
</Layout>
);
}