hugsbrugs/php-prerender-spa

该包的最新版本(dev-master)没有可用的许可信息。

PHP Prerender 单页应用实用工具

dev-master 2017-03-31 15:46 UTC

This package is auto-updated.

Last update: 2024-09-20 02:04:29 UTC


README

这个库提供了一些用于服务搜索引擎爬虫网站快照的实用功能。

Build Status Coverage Status

安装

使用 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>

查看 prerender.php

# 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 访问我的网站;)