stannlee/laravel-prerender

由Laravel创建的SPAs的Prerender中间件

v1.0.4 2022-06-15 20:50 UTC

README

对于Laravel 5及以下版本,请使用原始仓库

Codacy Badge

===========================

Google、Facebook、Twitter、Yahoo和Bing不断尝试查看您的网站...但他们不执行JavaScript。这就是Prerender被创建的原因。Prerender非常适合AngularJS SEO、BackboneJS SEO、EmberJS SEO以及其他任何JavaScript框架。

此中间件拦截来自爬虫对您的Laravel网站或应用的请求,然后调用(外部)Prerender服务来获取该页面的静态HTML而不是JavaScript。

安装

要求此包,运行:composer require stannlee/laravel-prerender

该包注册了其服务提供者

如果您想使用prerender.io服务,请在您的.env文件中添加以下内容

PRERENDER_TOKEN=yoursecrettoken

如果您正在使用自托管服务,请将服务器地址添加到.env文件中。

PRERENDER_URL=http://example.com:port

您可以通过添加以下内容到.env文件来禁用该服务

PRERENDER_ENABLE=false

这可能在您的本地开发环境中很有用。

工作原理

  1. 中间件检查是否应该显示一个预渲染页面
    1. 中间件检查请求是否来自爬虫(_escaped_fragment_ 或代理字符串)
    2. 中间件检查是否请求的是一个资源(js、css等...)
    3. (可选) 中间件检查URL是否在白名单中
    4. (可选) 中间件检查URL是否不在黑名单中
  2. 中间件对prerender服务(phantomjs服务器)发出GET请求以获取页面的预渲染HTML
  3. 将HTML返回给爬虫

定制

要定制白名单和黑名单,您首先必须发布配置文件

$ php artisan vendor:publish

白名单

白名单路径或模式。您可以使用通配符语法。如果提供了白名单,则仅包含白名单路径的URL将被预渲染。空数组表示所有URI都将通过此过滤器。请注意,这是完整的请求URI,因此包括起始斜杠和查询参数字符串。

// prerender.php:
'whitelist' => [
    '/frontend/*' // only prerender pages starting with '/frontend/'
],

黑名单

黑名单路径以排除。您可以使用通配符语法。如果提供了黑名单,则除了包含黑名单路径的URL外,所有URL都将被预渲染。默认情况下,包括一组资产扩展名(这实际上仅在您通过路由动态提供资产时才需要)。请注意,这是完整的请求URI,因此包括起始斜杠和查询参数字符串。

// prerender.php:
'blacklist' => [
    '/api/*' // do not prerender pages starting with '/api/'
],

感谢原始创建者 Jeroen Noten