DiscuzQ动态页面SEO方案

DiscuzQ是由腾讯打造的Q版Discuz,采用的是前后端分离的模式,其后端使用了大量Laravel包,前端是用vue2+nuxt写的,以后大概会提供nodejs+nuxt的服务端渲染SEO方案,不过还没正式发布。
本文章描述了一种基于无头浏览器(devtools)的旁路渲染SEO方案。

DiscuzQ官方网站: discuz.com/

生命周期

原本的流程是页面请求由php接收,然后统一返回入口html,

稍后实现服务端渲染服务和nginx配置。

稍后搞个傻瓜式版本。


代码放出来了,傻瓜式版本以后在搞吧,看需求人数。

location ~* \.(jpe?g|png|gif|ico|svg|webp|mp4|mp3|js|css|txt|)$ {
    try_files $uri $uri/;
}

location ^~ /api {
    try_files $uri /index.php$is_args$query_string;
}

location / {
    error_page 418 =200 @proxy;
    if ($http_user_agent ~* (bot|[Ss]pider)) {
        return 418;
    }
    try_files $uri /pc.html;
}

location @proxy {
    proxy_pass http://localhost:8081;
    proxy_set_header Source $scheme://$http_host$request_uri;
    proxy_set_header Scheme $scheme;
    proxy_set_header X-Real-Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/utils"
    "net/http"
)

func main() {
    r := gin.Default()
    r.NoRoute(func(c *gin.Context) {
        for k, v := range c.Request.Header {
            fmt.Println(k, v)
        }
        page := rod.New().MustConnect().MustPage(c.Request.Header.Get("Source")).MustWaitLoad()

        page.MustScreenshot("index.png")
        body := page.MustElement("html").MustHTML()
        _ = utils.OutputFile("index.html", body)
        c.String(http.StatusOK, body)
    })
    r.Run(":8081")
}

DiscuzQ开发使用交流群:群满了,加我weixin拉群:tianshuapp
或者扫码

标签:
Discuz!Q, DiscuzQ搜索引擎优化, 百度不收录DiscuzQ怎么办,DiscuzQ怎么做SEO,dzq seo, DiscuzQ静态化, DiscuzQ SEO优化

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

已经做了PhantomJS 旁路渲染, 网站页面谷歌都能收录了, 百度只收录首页,请问该怎么办

4年前 评论
EvenToss 4年前
flliped (作者) 4年前
Wangds (楼主) 4年前
EvenToss 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!