comento / laravel-prerender
Laravel中间件,用于动态渲染JavaScript渲染的页面以优化SEO
Requires
- php: >=5.5.9
- guzzlehttp/guzzle: ^6.0
- illuminate/support: ~5.0.14|~5.1|^6.0|^7.0
- symfony/psr-http-message-bridge: ^1.0
README
对于Laravel 4,请使用1.0分支
Laravel Prerender 
谷歌、Facebook、Twitter、雅虎和必应不断尝试查看您的网站...但它们不会执行JavaScript。这就是Prerender被构建的原因。Prerender非常适合AngularJS SEO、BackboneJS SEO、EmberJS SEO以及其他任何JavaScript框架。
此中间件拦截来自爬虫对您的Laravel网站或应用程序的请求,然后调用(外部)Prerender服务以获取该页面的静态HTML,而不是JavaScript。
Prerender遵循谷歌的_escaped_fragment_提议,我们建议您使用。这很简单
- 只需将
<meta name="fragment" content="!">添加到所有页面<head>中 - 如果您使用hash url(#),将其更改为hash-bang(#!),但您也可以使用HTML5的push-state
- 就这样!JavaScript页面的完美SEO。
安装
需要此包,请运行:composer require nutsweb/laravel-prerender
安装后,将ServiceProvider添加到config/app.php文件中的providers数组中。
'Nutsweb\LaravelPrerender\LaravelPrerenderServiceProvider',
如果您想使用prerender.io服务,请将以下内容添加到您的.env文件中
PRERENDER_TOKEN=yoursecrettoken
如果您正在使用自托管服务,请在.env文件中添加服务器地址。
PRERENDER_URL=http://example.com
您可以通过添加以下内容到您的.env文件中来禁用该服务
PRERENDER_ENABLE=false
这可能对您的本地开发环境很有用。
工作原理
- 中间件检查是否应该显示预渲染页面
- 中间件检查请求是否来自爬虫(
_escaped_fragment_或代理字符串) - 中间件检查是否请求的是资源(js、css等...)
- (可选) 中间件检查URL是否在白名单中
- (可选) 中间件检查URL是否不在黑名单中
- 中间件检查请求是否来自爬虫(
- 中间件向prerender服务(phantomjs服务器)发出
GET请求以获取页面的预渲染HTML - 将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/' ],
贡献
我非常欢迎任何贡献!请随意创建问题或拉取请求。
许可协议
MIT许可协议(MIT)
版权(c)2014 Jeroen Noten
本软件及相关文档文件(以下简称“软件”)的副本,任何人均可免费获得,不受限制地使用、复制、修改、合并、发布、分发、许可或出售软件副本,以及允许软件提供者进行此类操作,但须遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论源于合同、侵权或其他原因,与软件或软件的使用或其他交易有关。