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 協議》,轉載必須註明作者和本文連結