3

我正在运行AngularJS AJAX 应用程序的设置,并使用PhantomJSAngular-seo库来为爬虫提供实际标记而不是 JS 代码。

不幸的是,我收到一条错误消息:

The privacy settings for this attachment prevent you from posting it to this Timeline.

这似乎是许多用户关心的问题,但在开发者社区中没有受到任何关注。

我的元标记,我必须提到这些标记都充满了我进行的测试的当前信息:

  <meta property="og:type" content="website">
  <meta property="og:title" content="{{model.title}}" />
  <meta property="og:description" content="{{layout.og.description()}}" />
  <meta property="og:image" content="{{layout.og.image()}}" />
  <meta property="og:url" content="{{layout.og.currentUrl()}}" />

可能是什么问题呢

4

3 回答 3

2

如果您检查这些元标记,即使在 Angular 运行时,内容属性也会保持原样......不像 ng-bind 或将在运行时替换的东西。为了避免这种情况,我创建了以下指令:

angular
  .module('app')
  .directive('ngContent', [
    function() {
      return {
        link: function($scope, $el, $attrs) {
                $scope.$watch($attrs.ngContent, function(value) {
                  $el.attr('content', value);
                });
              }
      };
    }
  ])
;

然后通过以下方式实现:

<meta property="og:description" ng-content="myDescriptionFunction()" />

随着内容动态变化,这将在元标记中创建一个干净的content="Some description here."属性......(在浏览时观看 chrome 检查器中的元素)似乎对我有用!

于 2013-11-06T01:01:27.350 回答
0

解决方案基本上是使用某种服务器端用户代理检测来在社交媒体爬虫到达时进行检测。 http://www.michaelbromley.co.uk/blog/171/enable-rich-social-sharing-in-your-angularjs-app

于 2015-03-10T16:03:50.823 回答
-1

实际上你不能让 Angular(或任何其他前端 js)这样做,因为 Facebook 爬虫不执行 javascript。因此,这些标签必须在后端创建(例如使用 node.js 或 php)

请参阅如何使用 AngularJS、Mustache、Handlebars 等客户端模板引擎执行 Facebook Open Graph 友好元标记

于 2014-02-10T23:16:50.413 回答