10 09/2014

hexo 的 meta description

最后更新: Wed Sep 10 2014 12:37:50 GMT+0800

hexo meta description 部分的代码有点问题

在 light/layout/_partial/head.ejs 的代码

<% if (page.description){ %>
  <meta name="description" content="<%= page.description %>">
  <% } else if (config.description){ %>
  <meta name="description" content="<%= config.description %>">
  <% } else if (page.excerpt){ %>
  <meta name="description" content="<%= strip_html(page.excerpt).replace(/^\s*/, '').replace(/\s*$/, '') %>">
  <% } else if (page.content){ %>
  <meta name="description" content="<%= strip_html(page.content).replace(/^\s*/, '').replace(/\s*$/, '').substring(0, 150) %>">
  <% } %>
  <% if (page.keywords){ %><meta name="keywords" content="<%= page.keywords %>"><% } %>

解释:

  1. 如果 .md 中有 description 就用(如下边代码所示);

     title: hexo 的 meta description
     date: 2013-04-28 09:42:47
     category: hexo
    tags: hexo
     description: hexo 的 meta description 写在这里
    
  2. 否则,用 _config.yml 的站点 description;

  3. 否则,用内容简介(如果写文章的时候用过 <!——> 的话),删除所有前后的空格;
  4. 否则,用内容前 150个字,删除所有前后的空格
  5. 最后一句是 meta keywords 的

查看本页源代码

显然,这个顺序不是很理想。修改为下面的代码

<% if (page.description){ %>
  <meta name="description" content="<%= page.description %>">
  <% } else if (page.excerpt){ %>
  <meta name="description" content="<%= strip_html(page.excerpt).replace(/^\s*/, '').replace(/\s*$/, '').replace(/[\n,\r]/g,'') %>">
  <% } else if (page.content){ %>
  <meta name="description" content="<%= strip_html(page.content).replace(/^\s*/, '').replace(/\s*$/, '').substring(0, 150).replace(/[\n,\r]/g,'') %>">
  <% } else if (config.description){ %>
  <meta name="description" content="<%= config.description %>">
  <% } %>
  <% if (page.keywords){ %>
    <meta name="keywords" content="<%= page.keywords %>">
  <% } else if (page.tags){ %>
  <%
    var thistags=[];
    page.tags.each(function(k){ 
    thistags.push(k.name);
    }) %>
    <meta name="keywords" content="<%= thistags %>">
  <% } %>
  • 先使用 description,然后 excerpt,然后内容,最后(空文章)才是站点全局的描述。
  • 如果有 keywords,就写,否则使用 tags

hexo 的 html 模版使用 ejs (而不是 jade),这是 express+ejs 的 例子