【问题标题】:How to Serve Static HTML to the Search Engine User-Agents in Dynamic Rendering?如何在动态呈现中为搜索引擎用户代理提供静态 HTML?
【发布时间】:2020-04-04 04:44:15
【问题描述】:

我正在尝试使用“Prerender.cloud”服务创建一个动态渲染示例。我采用了我的 URL 的预呈现版本。

我可以把代码结构放在这里,但这不是问题。

a) 我净化了 CSS。 b) 我删除了所有不必要的代码和资源。 c) 我更改了资源顺序/组织以获得更好的速度。 d) 优化图像。 e) 减少了请求的大小。 f) 减小了页面大小。

我将页面速度提高了 3 秒,并减小了 %200 的大小。

但主要问题在这里:

我有一个 rootdomain.com/example-dynamic-rendering 页面。这是原始页面。我想把这个提供给客户。

另外,我有我的预渲染示例,我想知道如何将这个静态 HTML 页面从同一 URL 提供给搜索引擎用户代理?

您对此任务有任何想法或代码吗?

请帮忙。

【问题讨论】:

  • 有没有人提供一些有用的信息?

标签: rendering puppeteer static-html


【解决方案1】:

您可以使用 puppeteer 加载该动态页面/应用程序并加载它的 HTML 并将内容保存到 HTML 文件中。然后,如果 Google bot 抓取工具访问您的网站,您可以要求他们通过 robots.txt 文件抓取此 HTML 文件。

您可以在每次想要运行时运行此 puppeteer 脚本。也许你可以使用cron 来自动运行这个脚本。

类似这样的:

const puppeteer = require ('puppeteer')
const CronJob = require ('cron').CronJob
const fs = require ('fs-extra')

const crontask = '0 */1 * * *' // This will run script every hour
const urlDynamic = 'https://www.example.com' // Change this to your dynamic url
const staticFile = 'statichtml.html'

;(async () => {

    const browser = await puppeteer.launch ({
        headless: true,
        devtools: false
    })

    const [page] = await browser.pages ()

    const autorun = async () => {

        const open = await page.goto ( urlDynamic, { waitUntil: 'networkidle2', timeout: 0 } )

        const html = await page.content ()

        const save = await fs.writeFile ( staticFile, html )

    }

    const job = new CronJob(crontask, async () => {
        autorun ()
    })
    job.start()

})

【讨论】:

  • 感谢您的回答,但我没有收到“如果 Google 机器人爬虫访问您的网站,您可以要求他们通过 robots.txt 文件抓取此 HTML 文件。” Robots.txt 文件用于告诉搜索引擎机器人该做什么。我试图仅将静态 HTML 提供给搜索引擎用户代理,而不是客户端。客户将使用该页面的普通版本。
  • 谷歌机器人爬虫是搜索引擎机器人。我很困惑,但你想用这个静态 HTML 服务哪一个?谷歌机器人还是客户端?如果是 Google Bots,那么您可以将 statichtml.html 完整 URL 保存在 Robots.txt 中允许的 URL 列表中。如果您不能正确理解我的话,我很抱歉。
  • 让我这样问;您好,有一段时间我正在研究动态渲染。我正在尝试自己实现它。我不是开发人员,但我仍然相信我可以做到。我创建了一个示例静态 HTML 网页示例。我只想将此示例提供给搜索引擎用户代理,同时将普通网页提供给客户端。但是,在 wordpress 网站中,我怎样才能做到这一点?
  • Wordpress 几乎为这个动态 CMS 提供了所有缓存解决方案。您是否正在尝试制作自己的 Wordpress 插件?
  • 不,兄弟,我只是简单地尝试将同一 URL 上的不同内容提供给不同的用户代理。我不知道该怎么做,这很容易理解,但感谢您的尝试。
猜你喜欢
  • 2011-08-07
  • 1970-01-01
  • 2020-03-26
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多