FB共享加载的图像不同于og属性提供的图像

时间:2016-07-30 05:59:03

标签: php facebook .htaccess

我研究了很多关于FB股票的问题,但尚未解决我的问题。 我想我甚至在这些帖子中发现了问题 - https://stackoverflow.com/a/26714882/5348972 https://stackoverflow.com/a/35653463/5348972

我的网站包含一个基本的登录系统,如果设置了会话 - &gt;显示页面重定向到登录页面。因此,当我向<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" />

一切正常。 Post与指定的图像共享,因为<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抓取工具重定向到指定的<meta property="og:image" content="http://www.example.com/<?=$f?>" />正确的网址?我还可以通过htaccess将抓取工具重定向到另一个页面

RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC,OR] 

但是我需要发送post id来运行查询并在该重定向页面中动态更新meta标签。我不知道如何做到这一点(同时向两个不同的网址发送一个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+'&amp;src=sdkpreparse"><span id="fb_span"><i class="fa fa-facebook-official" aria-hidden="true" style="color: white"></i> Share </span></a></div>

1 个答案:

答案 0 :(得分:0)

如果指定了og:url,Facebook会尝试从or:url中指定的链接中获取元标记。它将其视为此处提到的规范URL:https://developers.facebook.com/docs/sharing/webmasters/getting-started/versioned-link