Невозможно настроить администраторов для комментариев на Facebook
У нас странная проблема на нашем сайте с комментариями в Facebook. Похоже, что скребок facebook неправильно анализирует (хотя бы одну) наши веб-страницы, так что он не отвечает администраторам, чтобы модерировать комментарии.
Если вы перейдете по этой ссылке:
http://www.beliefnet.com/Espanol/10-Atletas-olimpicos-mas-inspiradores.aspx
и просмотрите исходный код, вы увидите, что у нас есть соответствующие теги в голове, в том числе один для fb: admins. Если я захожу на Facebook под этой учетной записью, у меня нет модераторских опций.
Запустив страницу через отладчик объектов facebook, я получаю сообщение об ошибке, что у нас есть метатеги в теле. В частности, эта ошибка:
Meta Tags In Body: You have tags ouside of your . This is either because
your was malformed and they fell lower in the parse tree, or you accidentally
put your Open Graph tags in the wrong place. Either way you need to fix it
before the tags are usable.
Глядя на очищенный URL в нижней части этой страницы, я вижу, что Facebook "реорганизовал" наш html и поместил метатеги из головы в тело.
У кого-нибудь есть идеи, что вызывает это? Я подумал, что, может быть, где-то на странице был какой-то искаженный html, который отбрасывал все, но я просмотрел html для этой страницы, и это выглядит хорошо. Есть что-то еще, что я здесь скучаю?
2 ответа
Так что проблема в конечном итоге заключалась в том, что был <noscript>...</noscript>
вложенный в голову, который пытался включить пиксель отслеживания для браузеров без включенного javascript, как часть рекламного сервиса, который мы используем.
проблема должна была быть очевидной, если смотреть на результат, который Facebook дал нам за "как они видят вашу страницу". тело начинается сразу после сценария, но непосредственно перед тем, где начинается тег. очевидно, парсер фейсбука сходит с ума, когда видит элемент в голове, который должен быть в теле, поэтому он сразу же начинает тело там.
... выходной facebook...
console.log(OAS);
})();
</script><!-- End OAS Setup --><!-- Begin comScore Tag --><script>
var _comscore = _comscore || [];
_comscore.push({ c1: "2", c2: "8428430" });
(function() {
var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true;
s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js";
el.parentNode.insertBefore(s, el);
})();
</script>
</head>
<body>
<noscript>
</noscript>
<!-- End comScore Tag -->
... наш HTML...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<asp:PlaceHolder id="OASHeader" runat="server" />
<!-- Begin comScore Tag -->
<script type="text/javascript">
var _comscore = _comscore || [];
_comscore.push({ c1: "2", c2: "8428430" });
(function() {
var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true;
s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js";
el.parentNode.insertBefore(s, el);
})();
</script>
<!-- End comScore Tag -->
<noscript>
<img src="http://b.scorecardresearch.com/p?c1=2&c2=8428430&cv=2.0&cj=1" alt="" />
</noscript>
<script type="text/javascript">
....
<body>
....
поэтому в будущем недопустимые элементы заголовка могут определенно стать причиной этой проблемы.
Запуск вашего URL через validator.w3.org показывает несколько предупреждающих знаков:
Line 77, Column 14: document type does not allow element "noscript" here; assuming missing "object" start-tag
Line 154, Column 699: document type does not allow element "meta" here
Я смог сузить (потенциальную) проблему до этих строк на вашей странице:
document.write('<a href="' + OAS.config.url + 'click_nx.ads/' + OAS.config.sitepage + '/1' + OAS.config.rns + '@' + OAS.config.listpos + '!' + pos + '?' + OAS.config.query + '" target=' + OAS.config.target + '>');
document.write('<img src="' + OAS.config.url + 'adstream_nx.ads/' + OAS.config.sitepage + '/1' + OAS.config.rns + '@' + OAS.config.listpos + '!' + pos + '?' + OAS.config.query + '" border=\"0\" /></a>');
Эти строки document.write() также не работают с валидатором w3.org:
Line 53, Column 197: character "+" is not allowed in the value of attribute "target"
Более того, я думаю, что плохо использовать document.write() для вставки DOM (и потому, что это может привести к блокировке рендеринга страницы). Можете ли вы перейти на использование объектов js и DOM-манипуляций?
После того, как FB извлекает ваш URL, он запускает его через анализатор DOM, который, вероятно, задыхается, когда встречает эти строки document.write(). Тот факт, что эти строки имеют элемент , охватывающий два document.writes(), вероятно, сбивает с толку синтаксический анализатор. И синтаксический анализатор, вероятно, думает, что он достиг страницы, таким образом, ошибка 'Meta tags in body'.
В качестве быстрого теста попробуйте поместить метатег fb:admins над строками document.write(). Хотя я не удивлюсь, если парсер все еще захлебывается, но попробовать стоит.
Чтобы проверить html-код вашей страницы, я использовал простой скрипт, приведенный в комментарии в конце этой страницы php.net: http://www.php.net/manual/en/class.domxpath.php
Выдает ошибки:
Unexpected end tag : a in /home/dlee/tmp/tmp.html, line: 54
Unexpected end tag : head in /home/dlee/tmp/tmp.html, line: 183
htmlParseStartTag: misplaced <body> tag in /home/dlee/tmp/tmp.html, line: 184
Где tmp.html - это HTML-код вашей страницы, сохраненный в файл. Строка 54 - это ранее упомянутая строка document.write().
Дайте мне знать, если какой-либо из вышеперечисленных результатов приведет к выполнению, и я буду соответственно редактировать этот ответ