Open Graph 标记的几个 _document.js

Posted

技术标签:

【中文标题】Open Graph 标记的几个 _document.js【英文标题】:Several _document.js for Open Graph markup 【发布时间】:2017-10-16 11:02:00 【问题描述】:

我正在尝试对我的网站实施 og 标记 (next.js)。

主页包含 business.business 类型和前缀为

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# business: http://ogp.me/ns/business#">,

但是博客中文章的页面有一个文章类型和前缀

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">.

帮我处理头部前缀或者有没有可能使用多个_document.js的方法?

【问题讨论】:

【参考方案1】:

而不是多个_document.js 文件,您可以拥有一个具有动态输出的单个文件。

具体来说,您可以在自定义_document.js 中检查传递给getInitialProps() 方法的对象的pathname 属性,然后从那里确定该页面是主页还是文章。

更新:这在 Next.js v2.4.5(当前稳定版本)中不起作用,但它在 v3.0.1-beta.1 中起作用

所以,在你的情况下,它可能看起来像这样:

// ./pages/_document.js
import Document,  Head, Main, NextScript  from 'next/document'
import flush from 'styled-jsx/server'

const businessPrefix = 'og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# business: http://ogp.me/ns/business#';
const articlePrefix = 'og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#';

export default class MyDocument extends Document 
  static getInitialProps ( pathname, renderPage ) 
    const html, head, errorHtml, chunks = renderPage()
    const styles = flush()
    return  pathname, html, head, errorHtml, chunks, styles 
  

  render () 
    return (
     <html>
       <Head prefix=this.props.pathname === '/' ? businessPrefix : articlePrefix/>
       <body>
         <Main />
         <NextScript />
       </body>
     </html>
    )
  

查看https://next-test-peusycafcq.now.sh/ 和https://next-test-peusycafcq.now.sh/article 的工作示例。 (在每个页面上右键查看源代码可以看到&lt;head&gt;标签中的正确前缀,查看完整源代码见https://zeit.co/KYilgchYUEorC1g8s2HO4ALi/next-test/peusycafcq/source。)

另见https://github.com/zeit/next.js/blob/3a9c419160c33613cadf3e44b0aba82767c44d3a/readme.md#custom-document 和https://github.com/zeit/next.js/blob/3a9c419160c33613cadf3e44b0aba82767c44d3a/readme.md#fetching-data-and-component-lifecycle

【讨论】:

你确定吗?我在发布之前测试了它。我想我是在测试版上,所以这可能会有所不同。或者,您可以只使用标准(小写) 标签。我现在正在使用手机,但我会尽量记住在回家后再看一眼。 是的,对不起,我已经修改了答案,提到这适用于 v3.0.1-beta.1,但不适用于当前的 2.x 版本。 是的,我也测试过 我继续发布了我的示例,您可以在zeit.co/KYilgchYUEorC1g8s2HO4ALi/next-test/peusycafcq/source 看到源代码,在next-test-peusycafcq.now.sh 和next-test-peusycafcq.now.sh/article 看到输出

以上是关于Open Graph 标记的几个 _document.js的主要内容,如果未能解决你的问题,请参考以下文章

html Facebook Open Graph元标记

facebook open-graph 和 twitter 卡的有效 xhtml 元标记

Facebook Debugger lint 工具获取 HTTP 206 - 未检测到 Open Graph 元标记(其他工具可以)

Facebook Open Graph 对象忽略属性

最全open graph protocol(开放图谱协议) 介绍操作指南

当事件来自 Microsoft Graph 上的邀请时,日历事件的类别数组为空