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;
}
我遇到这个问题有一段时间了。 我们有一个 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;
}