写一个对搜索引擎友好的文章SEO分页类

[复制链接]
查看: 231|回复: 6
  • 慵懒
    2018-4-28 09:37
  • 发表于 2018-4-13 15:36:15 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    使用jsp/php/asp等动态程序生成的页面如何对搜索引擎友好呢?你可能想使用url_rewrite。不过,最好还是让同一个网址在任意时间对应的页面内容都是一样的或者相似的。因为搜索引擎不喜欢页面内容总是在变化的网址。
    一般博客文章需要将新发表的文章显示在前面,所以会使用"order by id desc"类似的SQL语句来查询一页包含的多篇文章。例如下面在JAVA+MYSQL中:
    public Article[] getArticleArray(int from, int size){
      Article[] article = new Article[0];
      String query = "SELECT * FROM blog ORDER BY DESC id LIMIT " + from + "," + size;
      try{
        ResultSet rs = st.executeQuery(query);
        rs.last();
        size = rs.getRow();
        article = new Article[size];
        rs.beforeFirst();
        for(int i=0; rs.next(); i++){
          article = new Article(
            rs.getInt("id"), rs.getString("time"),
            rs.getString("name"), rs.getString("blog")
          );
        }
        rs.close();
      }catch(Exception e){
        System.out.println(e);
      }
      return article;
    }
    这是我们的SEO分页类MySEOPager中的一个方法。如果我们想显示第一页,我们使用getArticleArray(0,10)来查询最新发表的10篇文章。
    这有什么问题呢?问题是当你添加一篇文章之后,原来的所有分页都改变了。为了让getArticleArray(0,10)每一次查询显示相同的文章,应 该让getArticleArray(0,10)显示新先发表的10篇文章。我们可以这样改造我们的分页类。删除与将影响页面的内容,你删除越新的文章, 生成的页面改变越大。
    public Article[] getArticleArray(int from, int size){
      Article[] article = new Article[0];
      String query = "SELECT * FROM blog ORDER BY id LIMIT " + from + "," + size;
      try{
        ResultSet rs = st.executeQuery(query);
        rs.last();
        size = rs.getRow();
        article = new Article[size];
        rs.beforeFirst();
        for(int i=0; rs.next(); i++){
          article = new Article(
            rs.getInt("id"), rs.getString("time"),
            rs.getString("name"), rs.getString("blog")
          );
        }
        rs.close();
      }catch(Exception e){
        System.out.println(e);
      }
      return article;
    }
    我们还需要得到数据库里到底有多少文章,所以再增加一个方法。
    public int getArticleCount(){
      int rowcount = 0;
      String query = "SELECT COUNT(*) AS rowcount FROM ideabook";
      try{
        ResultSet rs = st.executeQuery(query);
        if(rs.next()){
          rowcount = rs.getInt("rowcount");
        }
      }catch(Exception e){
        System.out.println(e);
      }
      return rowcount;
    }
    现在我们在JSP页面中显示最新发表的10篇文章。
    int start = -1;
    MySEOPager pager = new MySEOPager();
    int artcount = pager.getArticleCount();
    try{
      Integer.parseInt(request.getParameter("start"));
    }catch(Exception e){
      start = artcount-10;
    }
    if(start > artcount - 10) start = artcount - 10;
    if(start < 0) start = 0;

    Article art = pager.getArticleArray(start, 10);
    // do something with art here.
    int previous = start + 10; // 传到上一页的start值
    int next = start - 10; // 传到下一页的start值
    这样,生成的页面的内容的是否改变与你是否删除了先发表的文章有关系。只要你不删除文章,showblog.jsp?start=0带有这个参数的 网址对应的页面都不改变。只要你删除的是第n篇文章,那么start<(n-pagesize)对应的页面都不改变。
    发表于 2018-4-30 20:06:48 | 显示全部楼层
    额,看不懂在说神马~@_@
    回复

    使用道具 举报

    发表于 2018-5-2 03:26:21 | 显示全部楼层
    正需要,支持楼主大人了!
    回复

    使用道具 举报

    发表于 2018-7-12 23:44:05 | 显示全部楼层
    啥也不说了,感谢楼主分享哇!
    回复

    使用道具 举报

    发表于 2018-7-14 06:38:12 | 显示全部楼层
    这个帖一般般,还可以哦。
    回复

    使用道具 举报

    发表于 2018-7-18 11:48:45 | 显示全部楼层
    确实是难得好帖啊,顶先
    回复

    使用道具 举报

    发表于 2018-8-16 22:19:40 | 显示全部楼层
    珍惜生命,果断回帖。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精选推荐

     
     
    技术支持
    在线客服
    售后交流群瑞恩社区™售后</font><br><span>交流
    工作时间:
    8:00-18:00
    客服热线:
    15687827356
    微信扫一扫
    返回顶部 关注微信 下载APP 返回列表