It is because your markup is invalid which is causing Facebook to think the meta
elements are in the body. You can see this by running the page through W3C validator which make sense for the Facebook linter error message:
Your page has meta tags in the body instead of the head. This may be because your HTML was malformed and they fell lower in the parse tree.
Please fix this in order for the tags to be usable.
I suspect it is all the tracking codes you have at the start of your head.
<!-- Start DFP SETUP -->
<script type="text/javascript"><!--
//<![CDATA[
(function() {
var useSSL = 'https:' == document.location.protocol;
var src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');
})();
//]]>
//--></script>
<script type="text/javascript" src="http://img.bnqt.com/lib/js/sdpdfphelper.js"></script>
<script type="text/javascript">
googletag.pubads().enableSyncRendering();
googletag.pubads().setTargeting("title", sdpTargeting.title)
.setTargeting('targetPaths', sdpTargeting.targetPaths)
.setTargeting('fullPath', sdpTargeting.fullPath)
.setTargeting('queryStr', sdpTargeting.queryStr)
.setTargeting('domainName', sdpTargeting.domainName);
</script>
<!-- DFP SETUP end -->
<!-- Begin comScore Tag -->
<script>
var _comscore = _comscore || [];
_comscore.push({ c1: "2", c2: "6035223" });
(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>
<noscript>
<img src="http://b.scorecardresearch.com/p?c1=2&c2=6035223&cv=2.0&cj=1" />
</noscript>
<!-- End comScore Tag -->
Move those to the very end of your page right before the </body></html>
.