一个网站是否对搜索引擎友好,除了内容质量和用户体验外,还有一个重要的因素,就是tdk的设置。tdk是页面三要素title、keywords、description的首字母简称。这一节,我们介绍如何使用golang给博客设置tdk。

文章的tdk在我们发布文章的时候,有可供填写的输入框,可以保存到数据库中,然而首页、列表页需要手工去设置。首页的tdk信息又是seo优化中重中之重的部分,我们需要合理给的博客各个页面设置好tdk信息。

定义页面tdk结构信息

我们在 controller/common.go 文件中,增加一个WebInfo 的struct结构体,并声明使用它:

type WebInfo struct {
    Title       string `json:"title"`
    Keywords    string `json:"keywords"`
    Description string `json:"description"`
    NavBar      uint   `json:"nav_bar"`
}

var webInfo WebInfo
TitleKeywordsDescriptionNavBar
Title_搜外网:SEO培训入门图文教程、网络营销技术视频网课Keywords,SEO,SEO培训,SEO教程Description搜外网专注SEO培训以及网络营销技术视频网课。为搜外用户提供符合SEO的建站系统搜外6系统、设计小程序的搜外七巧板、滴滴友链等工具平台。NavBar

在前端页面调用tdk信息

因此,我们打开 template/partials/header.html,在head标签内部,增加这三个标签:

<title>{% if webInfo.Title %}{{webInfo.Title}}_{% endif %}{{SiteName}}</title>
{% if webInfo.Keywords %}<meta name="keywords" content="{{webInfo.Keywords}}">{% endif %}
{% if webInfo.Description %}<meta name="description" content="{{webInfo.Description}}">{% endif %}
webInfo.TitleSiteName

keywords标签不是必须的,现在我们就把它做成有则显示,没有则不显示来处理。

同样,description标签也是一样,如果没有设置description信息,则不显示这个标签。

分别给每一个需要给搜索引擎抓取收录的页面设置tdk信息

上面我们已经定义好了tdk信息的结构内容,现在我们就将他们分别的添加到每一个控制器中。

IndexPage()

为了方便设置首页的tdk信息,我们将首页的tdk信息放到config.json中,server部分,扩展server信息:

//...
"server": {
  "site_name": "看到你博客",
  "env": "development",
  "port": 8001,
  "log_level": "debug",
  "title": "看到你博客:Golang实战开发入门图文教程、Golang实战技术在线学习网站",
  "keywords": "golang,golang实战开发,golang实战学习",
  "description": "网上有很多的golang开发教程,他们都是从最基础的安装环境、golang语法开始的,对于一个小白,他是有帮助的。然而大家都知道,一味地接受学习,是一个枯燥到让人窒息的过程。更多的时候是,学完就完了,该忘的、不该忘的大部分都忘记了,没有根据自己的实际需求学习,大多都记忆不够深刻。为了打破这种低效率的学习过程,我将从这里开始,介绍一种带着需求学习的golang实战学习方式。",
  "icp": "粤ICP备19130249号-2"
}
//...

再在config/server.go处理文件中,扩展server结构体:

type serverConfig struct {
    SiteName    string `json:"site_name"`
    Env         string `json:"env"`
    Port        int    `json:"port"`
    LogLevel    string `json:"log_level"`
    Title       string `json:"title"`
    Keywords    string `json:"keywords"`
    Description string `json:"description"`
    Icp         string `json:"icp"`
}
IndexPage()
webTitle := config.ServerConfig.Title
    if category != nil {
        webTitle += "_" + category.Title
        webInfo.NavBar = category.Id
    }
    webInfo.Title = webTitle
    webInfo.Keywords = config.ServerConfig.Keywords
    webInfo.Description = config.ServerConfig.Description
    ctx.ViewData("webInfo", webInfo)

首页中默认调用设置的title。如果存在分类筛选条件的话,则附加分类标题。首页描述、首页关键词则逐一调用。

ArticleDetail()
webInfo.Title = article.Title
webInfo.Keywords = article.Keywords
webInfo.Description = article.Description
ctx.ViewData("webInfo", webInfo)

文章详情页面中,我们则直接调用文章填写的tdk信息即可。

其他页面为了页面的信息完整,我们也添加上。

Install(ctx iris.Context)

webInfo.Title = "博客初始化"
ctx.ViewData("webInfo", webInfo)

AdminLogin(ctx iris.Context)

webInfo.Title = "登录"
    ctx.ViewData("webInfo", webInfo)

至此,tdk信息算是设置完毕了。我们重启项目,来检查一下tdk信息,如果正常,则表示填写正确。

教程用例源码

完整的项目示例代码托管在GitHub上,访问github.com/fesiong/goblog 可以查看完整的教程项目源代码,建议在查看教程的同时,认真对照源码,可以有效提高码代码速度和加深对博客项目的认识。建议直接fork一份来在上面做修改。欢迎点Star。