swooinc/laravel-prerender

Laravel 中间件,用于动态渲染 JavaScript 渲染的页面以优化 SEO

v4.0.1 2023-05-23 15:58 UTC

This package is auto-updated.

Last update: 2024-09-23 18:36:18 UTC


README

Google、Facebook、Twitter、Yahoo 和 Bing 不断尝试查看您的网站...但是它们不执行 JavaScript。这就是 Prerender 被构建的原因。Prerender 对 AngularJS SEO、BackboneJS SEO、EmberJS SEO 和任何其他 JavaScript 框架都适用。

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

Prerender 遵循 Google 的 _escaped_fragment_ 建议方案,我们建议您使用。这很简单

  • 只需将 <meta name="fragment" content="!"> 添加到所有页面的 <head> 部分
  • 如果您使用哈希 URL(#),请将其更改为哈希-bang(#!),但您也可以使用 HTML5 的 push-state
  • 就这么简单!在 JavaScript 页面上实现完美的 SEO。

安装

需要此包,请运行: composer require swooinc/laravel-prerender

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

PRERENDER_TOKEN=yoursecrettoken

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

PRERENDER_URL=http://example.com

您可以通过在 .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/'
],

贡献

我热爱任何贡献!请随意创建问题或拉取请求。

许可证

MIT 许可证 (MIT)

版权所有 © 2014 Jeroen Noten

以下对本软件及其相关文档文件(“软件”)的副本的任何人均获准免费使用该软件,不受限制,包括但不限于以下权利:使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,并允许向软件提供方提供软件副本的人进行此类操作,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论该责任基于合同、侵权或其他原因,以及与软件的使用或其他方式相关。