如何在Facebook输入非WWW域名时显示网站OpenGraph图片
我已经在网站中配置了Facebook OpenGraph标签,目的是让用户输入网站URL时在Facebook能显示对应的缩略图。目前只有输入www.carhub.fun时图片能正常显示,但输入carhub.fun(不带www)时却无法显示图片,希望能像times.com这类知名网站一样,不管带不带www都能正常展示图片。
我的OG标签配置如下:
<meta name="twitter:card" value="summary"> <meta property="fb:app_id" content="766935150367487" /> <meta property="og:title" content="This is your car" /> <meta property="og:type" content="article" /> <meta property="og:url" content="http://carhub.fun" /> <meta property="og:image" content="http://carhub.fun/images/car15.jpg" /> <meta property="og:description" content="Liked it? Click Here for More Info."/> <meta property="og:site_name" content="carhub.fun - Which one are you?"/>
实际结果:输入www.carhub.fun时图片缩略图正常显示;
预期结果:输入carhub.fun时也能正常显示图片。
这个问题的核心原因是:Facebook把带www和不带www的域名视为两个完全独立的URL,它之前抓取不带www的域名时可能没有获取到正确的OG标签,或者缓存了旧的内容。要解决这个问题,你需要做三件关键的事情:
1. 设置301永久重定向,统一域名规范
像times.com这类知名网站都是这么做的——把带www和不带www的域名统一指向同一个地址(要么都跳转到带www的,要么都跳转到不带的)。这样不管用户输入哪个域名,最终都会访问到同一个页面,Facebook爬虫也只会抓取这个规范地址的OG标签。
具体配置取决于你的服务器环境:
Apache服务器(用.htaccess文件)
在网站根目录的.htaccess文件中添加以下规则(假设你想统一到带www的域名):
RewriteEngine On # 匹配不带www的域名 RewriteCond %{HTTP_HOST} ^carhub.fun [NC] # 重定向到带www的版本,301是永久重定向 RewriteRule ^(.*)$ http://www.carhub.fun/$1 [L,R=301]
Nginx服务器
在你的Nginx配置文件中添加一个server块:
server { listen 80; server_name carhub.fun; # 永久重定向到带www的域名 return 301 http://www.carhub.fun$request_uri; }
2. 修正OG标签中的og:url字段
og:url是告诉Facebook这个页面的唯一标准地址,必须和你设置的规范域名一致。比如如果你决定统一到带www的域名,就把这个标签改成:
<meta property="og:url" content="http://www.carhub.fun" />
这个标签能避免Facebook把不同域名的页面当成重复内容,确保它抓取的是正确的OG信息。
3. 强制刷新Facebook的缓存
Facebook会缓存它抓取过的页面内容,所以即使你设置好了重定向和修正了标签,之前缓存的旧数据还会生效。你需要用Facebook官方的分享调试工具,分别输入carhub.fun和www.carhub.fun,点击“重新抓取”按钮,让Facebook更新缓存的内容。
这样操作之后,不管用户输入带不带www的域名,都会跳转到同一个规范地址,Facebook也会识别到这两个域名指向同一个页面,从而正常显示你的OG图片了。
内容的提问来源于stack exchange,提问作者user9518897

