我正在使用AngularJS开发应用程序。一切似乎都很好,直到我遇到让我头疼的事情:SEO。
从许多参考资料中,我发现由谷歌机器人或Bing机器人抓取并编入索引的AJAX内容并不那么容易。'因为爬虫不会渲染Javascript。
目前我需要一个使用PHP的解决方案。我使用PHP Slim Framework,所以我的主文件是index.php,它包含回显我的index.html内容的函数。我的问题是:
是否可以在HTML中制作呈现的Javascript快照?
我的策略是:
如果请求查询字符串包含_escaped_fragment_,则应用程序将生成快照并将该快照作为响应而不是确切文件。
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
经过大量的搜索和研究,我终于通过将PHP与PhantomJS(版本2.0)混合来解决我的问题。我在PHP中使用exec()函数来运行phantomJS并创建Javascript文件以获取目标URL的内容。以下是片段:
<强>的index.php 强>
// Let's assume that you have a bin folder under your root folder directory which contains phantomjs.exe and content.js
$script = __DIR__ ."/bin/content.js";
$target = "http://www.kincir.com"; // target URL
$cmd = __DIR__."/bin/phantomjs.exe $script $target";
exec($cmd, $output);
return implode("", $output);
<强> content.js 强>
var webPage = require('webpage');
var system = require('system');
var page = webPage.create();
var url = system.args[1]; // This will get the second argument from $cmd, in this example, it will be the value of $target on index.php which is "http://www.kincir.com"
page.open(url, function (status) {
page.onLoadFinished = function () { // Make sure to return the content of the page once the page is finish loaded
var content = page.content;
console.log(content);
phantom.exit();
};
});
答案 1 :(得分:0)
我最近发布了一个项目,可以让PHP访问浏览器。在此处获取:https://github.com/merlinthemagic/MTS。它也依赖于PhantomJS。
下载并设置后,您只需使用以下代码:
$myUrl = "http://www.example.com";
$windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);
//now you can either retrive the DOM and parse it, like this:
$domData = $windowObj->getDom();
//this project also lets you manipulate the live page. Click, fill forms, submit etc.