You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在静态导出的Next.js项目中为HTML标签添加lang属性?

解决静态导出Next.js站点添加HTML lang属性的问题

既然next export和官方的i18n配置不兼容,这里有几个靠谱的方法能帮你给静态作品集站点加上lang属性,修复可访问性评分的扣分问题:

方法1:自定义_document.js(首推)

这是最直接的方案,因为Next.js的自定义Document允许你直接修改根HTML标签的属性,而且完全兼容静态导出。

步骤很简单:

  1. 在项目的pages目录下创建(如果没有的话)_document.js文件
  2. 写入下面的代码:
import Document, { Html, Head, Main, NextScript } from 'next/document';

class MyDocument extends Document {
  render() {
    // 把这里的"en"换成你需要的语言代码,比如"zh-CN"
    return (
      <Html lang="en">
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

重新执行next export后,生成的所有静态HTML文件的根标签都会带上lang属性,完美解决问题。

方法2:在_app.js中动态设置

如果你的站点需要根据不同页面设置不同的lang值(比如简单的多语言静态站),可以在全局的_app.js里用useEffect动态修改:

import { useEffect } from 'react';
import '../styles/globals.css';

function MyApp({ Component, pageProps }) {
  useEffect(() => {
    // 这里可以根据路由或pageProps传递的值动态设置lang
    document.documentElement.lang = pageProps.lang || 'en';
  }, [pageProps.lang]);

  return <Component {...pageProps} />;
}

export default MyApp;

这种方式适合需要灵活切换语言的场景,页面加载时会自动给HTML标签加上对应的lang属性。

方法3:手动配置多语言静态页面(适合多语言站点)

如果你的静态站点是多语言的,又不想用官方i18n,可以通过next.config.jsexportPathMap手动生成不同语言的页面,再给每个页面设置对应的lang:

  1. 先在next.config.js里配置导出路径:
module.exports = {
  exportPathMap: async function () {
    return {
      '/': { page: '/' },
      '/es': { page: '/', query: { lang: 'es' } },
      '/zh': { page: '/', query: { lang: 'zh-CN' } }
    };
  }
};
  1. 在你的页面组件(比如index.js)里接收lang参数并设置:
import { useEffect } from 'react';

export default function Home({ lang }) {
  useEffect(() => {
    document.documentElement.lang = lang || 'en';
  }, [lang]);

  // 页面内容
  return <div>你的作品集内容</div>;
}

export async function getStaticProps({ query }) {
  return {
    props: {
      lang: query.lang || 'en'
    }
  };
}

这样执行next export后,会生成//es/zh三个静态页面,每个页面的HTML标签都会带上对应的lang属性。

总的来说,方法1最适合你的单语言静态作品集站点,操作简单,一步到位就能修复可访问性评分的问题。

内容的提问来源于stack exchange,提问作者alanionita

火山引擎 最新活动