Nuxt OG:tags Facebook 未正确读取

Nuxt OG:tags not being correctly read by Facebook

我遇到这个问题有一段时间了。 我们有一个 SSR 模式的 nuxt 网站 运行,在它里面,它有一个新闻页面遵循这个结构:

/pages
    /noticia
        /_slug
             /_id
                 index.vue

当我们尝试在 facebook 或任何其他使用 OG:tags 而不是 twitter 的社交媒体上分享它时,就会出现此问题,因为 twitter 运行良好。

示例:https://www2.oabrs.org.br/noticia/comunicado-csa/60613 如果你检查上面的 link,你会看到正确的元标签,但在 Facebook 调试器上,它显示来自另一个新闻的标签。我试过改变 slugs,所以它会是 ( /noticia/_id/_slug ) 但它也没有用。

Index.vue

head() {
  if(this.noticia){
    // console.log(this.noticia)
    return {
      title: decode(this.noticia.titulo),
      link: [
        {
            hid: 'canonical',
            rel: 'canonical',
            href: `${this.$config.VUE_APP_BASE_HREF + this.$router.currentRoute.fullPath}`
        }
      ],
      meta: [
        {
          hid: "keywords",
          property: "keywords",
          content: this.noticia.tags,
        },
        {
          hid: "og:url",
          property: "og:url",
          content: this.$config.VUE_APP_BASE_HREF + this.$router.currentRoute.fullPath,
        },
        {
          hid: "og:title",
          property: "og:title",
          content: decode(this.noticia.titulo),
        },
        {
          hid: "og:description",
          property: "og:description",
          content: decode(this.noticia.titulo),
        },
        {
          hid: "og:image",
          property: "og:image",
          content: this.filename || this.$config.VUE_APP_IMAGES_DEFAULT,
        },
        {
          hid: "twitter:url",
          name: "twitter:url",
          content: this.$config.VUE_APP_BASE_HREF + this.$router.currentRoute.fullPath,
        },
        {
          hid: "twitter:title",
          name: "twitter:title",
          content: decode(this.noticia.titulo),
        },
        {
          hid: "twitter:image",
          name: "twitter:image",
          content: this.filename || this.$config.VUE_APP_IMAGES_DEFAULT,
        },
      ]
    };
  } else {
    return {
      title: "Notícia não encontrada",
      link: [
        {
            hid: 'canonical',
            rel: 'canonical',
            href: `${this.$config.VUE_APP_BASE_HREF + this.$router.currentRoute.fullPath}`
        }
      ],
    };
  }
},
async asyncData({ app, params, store, route }){
  // console.log(route)
  try{
    await store.dispatch('noticias/fetchNoticia', route.params.id);
    // console.log(store.getters['noticias/getNoticia']);
    return {
      noticia: store.getters['noticias/getNoticia']
    }
  } catch (e){
    // console.log(e)
  }
},

我认为它与元字符集有关,但它设置为 UTF-8,所以我猜不是。

我发现了问题 问题是我配置了我的 axios httpClient,所以它期望状态 200 得到肯定的响应,但是 facebook / linkedin / whatsapp ...(不是 twitter)只发出部分请求 returns 206 响应。 参见:Facebook debugger : Response 206

所以,我的 url 和标签都是正确的,我所要做的就是启用 206 作为可能的响应。

    const responseInterceptor = response => {
    let data = null;
    switch(response.status) {
        case 200: case 206: 
            if(response.data){
                data = response.data;
            } else {
                // notify error
            }
            break;
        
        // any other cases
        default:
            // default case
    }

    return data;
}