【发布时间】:2016-07-30 05:59:03
【问题描述】:
我对 FB 分享问题进行了很多研究,但还没有解决我的问题。 我想我什至在这些帖子中发现了问题- https://stackoverflow.com/a/26714882/5348972 https://stackoverflow.com/a/35653463/5348972
我的网站包含一个基本的登录系统,如果设置了会话 -> 显示页面,否则重定向到登录页面。因此,当我向 <head> 提供静态 og 数据时,例如-
<meta property="og:image"content="http://example.com/images/loginPageCarausel/unnamed.png" />
<meta property="og:title" content="Some Title" />
<meta property="og:url" content="http://example.com" />
<meta property="og:description" content="No Description" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="400" />
<meta property="og:image:height" content="300" />
一切正常。帖子与指定图像共享,因为<head> 的这一部分是常见的,无论会话是否设置。但是,当我将标题更改为此时,
<?php
include_once 'includes/functions.php';
$pg = getPageName('pages.php');
if($pg) {
if(isset($_GET['poll'])) {
$i = $_GET['poll'];
if(class_exists('Polls') && class_exists('FilesUpload')) {
$vip_poll = Polls::getPollDataById(POST_TBL, $i);
$title = $vip_poll->question;
$gen = $vip_poll->poll_genre;
$vip_pollOwnersId = $vip_poll->user_id;
$media_files = FilesUpload::getMediaFiles(MED_TBL, $i, $vip_pollOwnersId);
$f_type = $media_files->file_type;
$f = $media_files->file_name;
$img_ext_array = array('jpg', 'gif', 'jpeg', 'png');
if (in_array($f_type, $img_ext_array)) {
$analysis = Polls::select_all_from_graph_page_data(GP_DATA_TBL, $vip_pollOwnersId, $i);
if($analysis != false) {
if (!empty($analysis)) {
$analysis_data = $analysis->data;
if (strlen($analysis_data) > 300) {
$analysis_data = substr($analysis_data, 0, 300) . "...";
}
$analysis = $analysis_data; ?>
<meta property="fb:app_id" content="1775**************">
<meta property="og:image" content="http://www.example.com/<?=$f?>" />
<meta property="og:title" content="<?=$title?>" />
<meta property="og:url" content="http://example.com/pages.php?vip_poll=<?=$i?>&genre=<?=$gen?>" />
<meta property="og:description" content="<?=$analysis_data?>" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="400" />
<meta property="og:image:height" content="300" />
<?php }
}
}
}
}
}
?>
在这种情况下,FB 爬虫会找到登录页面的图像之一,并且 FB 调试器会发出各种 og 属性缺失的问题。我怀疑这是因为 ajax 请求页面将 FB 爬虫重定向到登录页面,因为它的会话从未设置。我已经阅读了这个页面
https://developers.facebook.com/docs/sharing/webmasters/crawler
并尝试使用 HTACCESS 解决此问题,并在我的 htaccess 文件中添加了这几条规则
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit
RewriteRule ^(.*)$ ogtags.php?$1 [L,QSA]
但它也没有帮助我。我对 htaccess 编码了解不多,但我想知道这些行是否可以让爬虫在未登录的情况下访问内容。如果不是,那么我是否需要更改我的登录逻辑(这可能不是一个好主意)。如果有更好的方法请详细说明。
我也尝试使用 jquery 更改元标记,但这也没有奏效。
我的问题是如何将 FB 爬虫重定向到指定的正确 url,即<meta property="og:image" content="http://www.example.com/<?=$f?>" />?我也可以通过htaccess将爬虫重定向到另一个页面
RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC,OR]
但是我需要发送帖子 ID 以在该重定向页面中动态运行查询和更新元标记。我不知道怎么做(同时向两个不同的 url 发送一个 id)。我的第二个问题是我在 FB 中读到,它仅在共享帖子时才抓取信息。我尝试通过 jquery 和 php 更改元标记并在控制台正确显示所有 og 标记时共享内容,但爬虫仍然进入登录页面(未设置的 html 页面)?这是我正在使用的 fb 分享代码-
<div class="fb-share-button" data-href="http://www.example.com/pages.php?vip_poll='+app_id+'" data-layout="button_count" data-mobile-iframe="true"><a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u='+url_enc+'&src=sdkpreparse"><span id="fb_span"><i class="fa fa-facebook-official" aria-hidden="true" style="color: white"></i> Share </span></a></div>
【问题讨论】:
-
我想说,首先您应该考虑首先分享登录背后的内容是否有意义。至少对于正常的时间线帖子来说,恕我直言。与您的用户成为朋友并分享了某些内容的人会在他们的新闻源中看到它——但是当他们点击链接时,他们将不会获得实际内容,而只会被重定向到您的登录页面 – 非常令人沮丧用户体验! (这可能在某些情况下有意义,例如当共享主要发生在一个组内时,其中所有成员也是您网站的注册用户。)
-
我同意你的观点,但这是一个投票网站,所以我添加了社交媒体插件。尽管如此,我想我已经找到了问题所在,而且上面列出的问题都没有。我发现我的 htaccess 甚至没有被读取(因此 FB 永远不会通过登录页面)。在浏览了更多之后,我发现这是一个 Godaddy 问题,并且许多其他用户在他们的 htaccess 文件中遇到了同样奇怪的问题。我不太了解 htaccess 的东西,但我正在努力。