Моя цель состоит в том, чтобы попытаться поместить этот тег в заголовок приложения NextJS:
<link rel="canonical" href="http://stackoverflow.com" />
Я настроил пользовательский _app.js
, и в getInitialProps я возвращаюмой URL с помощью пакета url
.Это работает нормально, и я получаю URL при загрузке страницы.Вот код для этого:
static async getInitialProps({ Component, ctx }) {
const initialProps = {};
if (isServer) {
const { req: { url: pageUrl, headers: { host } } } = ctx;
initialProps.canonicalHref =
createUrl({subdomain: host.split('.')[0], pathname: url.parse(pageUrl).pathname});
}
return { ...initialProps }
}
И в моей функции рендеринга я использую это для рендеринга тега ссылки:
<Head>
<link rel="canonical" href={canonicalHref || location.host + router.asPath} key="canonical" />
</Head>
Идея состоит в том, что getInitialProps возвращает первое значение, затемна стороне клиента он возвращает ноль, заставляя его вернуться к location.host + router.asPath
.
Единственная проблема заключается в том, что router.asPath, по-видимому, на один шаг отстает от фактического значения при каждом обновлении.Например, скажем, если я нахожусь на 'http://bla.com/two', а моя предыдущая страница была' http://bla.com/one', тогда ссылка будет отображаться как <link rel="canonical" href="http://bla.com/one" />
.
Я надеюсь, что объяснил самздесь достаточно хорошо, и я надеюсь, что у кого-нибудь есть какие-либо идеи, чтобы помочь:)