hugsbrugs / php-prerender-spa
该包的最新版本(dev-master)没有可用的许可信息。
PHP Prerender 单页应用实用工具
dev-master
2017-03-31 15:46 UTC
Requires
- hugsbrugs/php-filesystem: dev-master
- hugsbrugs/php-http: dev-master
Requires (Dev)
- phpunit/phpunit: ^6.0
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-20 02:04:29 UTC
README
这个库提供了一些用于服务搜索引擎爬虫网站快照的实用功能。
安装
使用 composer 安装包
composer require hugsbrugs/php-prerender-spa
在您的 PHP 代码中,加载库
require_once __DIR__ . '/../vendor/autoload.php'; use Hug\PrerenderSpa\PrerenderSpa as PrerenderSpa;
用法
第一步:生成您的网页快照
$prerender_url = 'http://123.123.123.123:3000/'; $prerender_auth = 'USER:PASSWORD'; // or null $output = __DIR__ .'/../data/snapshots/'; // directory where to store snapshot (must be writable) # Load Urls From Sitemap $urls = PrerenderSpa::get_sitemap_urls('/path/to/sitemap.xml'); # Or Set Urls manually // $urls = ['https://hugo.maugey.fr/developeur-web/HTML5']; # Instanciate PrerenderSpa $PrerenderSpa = new PrerenderSpa($urls, $output, $prerender_url, $prerender_auth); # Launch Snapshot Generation $PrerenderSpa->prerender(); # Wait .... # Print Report error_log(print_r($PrerenderSpa->report, true)); # Set Your Personnalized 404 $html = 'My Personalized 404'; PrerenderSpa::set_404($html, $output); # Set Your Personnalized 500 $html = 'My Personalized 500'; PrerenderSpa::set_500($html, $output);
第二步:向网络爬虫提供网页快照
将搜索引擎爬虫重定向到 prerender.php 服务
<IfModule mod_proxy_http.c>
RewriteCond %{HTTP_USER_AGENT} googlebot|yahoo|bingbot|baiduspider [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
RewriteRule ^(?!.*?(\.js|\.css|\.xml|\.less|\.png|\.jpg|\.jpeg|\.gif|\.pdf|\.doc|\.txt|\.ico|\.rss|\.zip|\.mp3|\.rar|\.exe|\.wmv|\.doc|\.avi|\.ppt|\.mpg|\.mpeg|\.tif|\.wav|\.mov|\.psd|\.ai|\.xls|\.mp4|\.m4a|\.swf|\.dat|\.dmg|\.iso|\.flv|\.m4v|\.torrent|\.ttf|\.woff))(index\.php)?(.*) /prerender.php/https://hugo.maugey.fr/$3 [P,L]
</IfModule>
# Where do you store prerender filesystem $output = __DIR__ . '/../data/'; # .htaccess http://prerender.io/URL_TO_SNAP $url = $_REQUEST['URL']; $html = null; $http_code = null; try { # Get Snapshot if(false !== $snapshot = PrerenderSpa::get_snapshot($url, $output) { $http_code = 200; $html = $snapshot; } else { # Set Header status 404 Not Found $http_code = 404; $html = PrerenderSpa::get_404($output); } } catch(\Exception $e) { $http_code = 500; $html = PrerenderSpa::get_500($output); } Http::header_status($http_code); echo $html;
第三步:按需生成快照
通过仅提供内容已更改的 URL 重复第一步,以优化服务器运行无头浏览器快照服务的效率。
为什么使用这个服务?
我已经在我的服务器上使用了一段时间 Prerender 服务,并使用 brenett 扩展来缓存快照,但这个解决方案已经不能令我满意,因为缓存时间固定。因此,即使快照不需要更新,也会被重新生成。从 SEO 角度来看,快照服务的时间非常糟糕,因为缓存过期后和爬虫请求内容之前缺乏预渲染。这个解决方案不是完美的,因为你需要手动列出需要重新生成快照的文件,但它满足了我的需求;)
单元测试
composer exec phpunit
待办事项
压缩保存的 HTML 归档快照的 gzip
作者
Hugo Maugey 访问我的网站;)