Java生成sitemap网站地图

sitemap 是什么?对应没有接触过网站 SEO 的同学可能不知道,这里引用一下百度站长的一段解释。

Sitemap(即站点地图)就是您网站上各网页的列表。创建并提交Sitemap有助于百度发现并了解您网站上的所有网页。您还可以使用Sitemap提供有关您网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供百度Spider参考

简单来说,sitemap 就是搜索引擎爬虫便于爬取到网站内的所有网页。

SEO之初

之前特意通过 site 指令查询过公司同行业网站的收录情况,发现搜索引擎对于我司的网站收录数量真的不是差了一星半点-.-,原因嘛,就是一直没有专门的人做 SEO 优化工作。

前几个月我倒是生成了网站的一部分 sitemap 提交到神马搜索站长平台,但是明明是按照官方文档格式生成的,却一直提示格式不对,也不知道什么情况,也没有官方反馈渠道,就不了了之了。最近公司新招了 SEO 专员,于是便有了定时生成 sitemap 文件的需求。这种生成的文件一般都是对外直接可以访问的,可以通过 nginx 配置静态资源文件来完成。

需求探讨

sitemap 的格式一般是 XML 格式的,第一反应就是可以使用 DOM4J 来完成,但是做 SEO 的同事说了,因为 sitemap 文件的限制,同一个 sitemap 文件最多有 5 万条 URL,超出 5 万条,就应该放入到下一个 sitemap 文件当中去。通过 DOM4J 来做的话,还需要判断条数感觉有点麻烦(懒),就上 gayhub 搜了一下相关的轮子 generate sitemap,找到了现成的轮子 sitemapgen4j,项目的 README 中使用方法写的比较完善,这里不再多说。

为什么文档很完善的情况下,我要写这篇博客呢?(10月第一篇,凑数的(逃~)

上文提到了,如果超出了 5 万条需要写入另外一个 sitemap 当中,这个功能 sitemapgen4j 已经替我们实现了,无需担心。如果超出,生成的文件就像是这样的:

- article1.xml
- article2.xml
- article3.xml
- article4.xml

这样的话,在站长平台这里,如果新增了文件就要新增一条sitemap 网址记录,很麻烦。

好在,搜索引擎考虑到了这种问题,有相应的解决方法。

我们把每次生成的 sitemap 文件的地址,添加到一个 sitemap 索引文件当中去,这样,我们只需要向平台提交一个 sitemap 索引文件的地址即可。

不多说,代码见。

生成 sitemap 文件

首先引入 sitemapgen4j 依赖

<dependency>
    <groupId>com.github.dfabulich</groupId>
    <artifactId>sitemapgen4j</artifactId>
    <version>1.1.1</version>
</dependency>

编写生成 sitemap 代码

public void generateSitemap() {
    String tempPath = "/home/seo";
    //String tempPath = System.getProperty("java.io.tmpdir") + File.separator + "/seo/";
    File file = new File(tempPath);
    if (!file.exists()) {
        file.mkdirs();
    }
    String domain = "https://www.domain.com";
    try {
        WebSitemapGenerator g1 = WebSitemapGenerator.builder(domain, file)
                .fileNamePrefix("article").build();
        Date date = new Date();
        for (int i = 1; i < 21; i++) {
            WebSitemapUrl url = new WebSitemapUrl.Options(domain + "/article/" + i ).lastMod(date).build();
            g1.addUrl(url);
        }

        WebSitemapGenerator g2 = WebSitemapGenerator.builder(domain, file)
                .fileNamePrefix("issue").build();
        Date date2 = new Date();
        for (int i = 1; i < 21; i++) {
            WebSitemapUrl url = new WebSitemapUrl.Options(domain + "/issue/" + i ).lastMod(date2).build();
            g2.addUrl(url);
        }

        List<String> fileNames = new ArrayList<>();

        // 生成 sitemap 文件
        List<File> articleFiles = g1.write();
        articleFiles.forEach(e -> fileNames.add(e.getName()));
        List<File> issueFiles = g2.write();
        issueFiles.forEach(e -> fileNames.add(e.getName()));

        // 构造 sitemap_index 生成器
        W3CDateFormat dateFormat = new W3CDateFormat(W3CDateFormat.Pattern.DAY);
        SitemapIndexGenerator sitemapIndexGenerator = new SitemapIndexGenerator
                .Options(domain, new File(tempPath + "sitemap_index.xml"))
                .dateFormat(dateFormat)
                .autoValidate(true)
                .build();

        fileNames.forEach(e -> {
            try {
                // 组装 sitemap 文件 URL 地址
                sitemapIndexGenerator.addUrl(tempPath + e);
            } catch (MalformedURLException e1) {
                e1.printStackTrace();
            }
        });

        // 生成 sitemap_index 文件
        sitemapIndexGenerator.write();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
}

通过 Nginx 提供给外部访问

文件已经生成了,就需要对外提供访问了,这里使用 nginx 来实现,如果用 apache 也是可以的。

上文生成的文件我放在了 /home/seo 目录下,文件有

- seo
    - article1.xml
    - article2.xml
    - article3.xml
    - article4.xml
    - sitemap_index.xml

现在修改 nginx 配置文件,这里说明一下,因为 sitemap 生成一份就可以了,但是要通过域名能直接访问到,所以需要在 nginx 跳转一下到有 sitemap 文件的服务器。

存放 sitemap 文件的 nginx 配置如下

server {
    listen          8888;
    server_name     111.112.113.114;
    charset utf8;

    access_log logs/access.log  main;

    location / {
        alias /home/seo/;
        sendfile on;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

根域名的 nginx 配置文件

server {
    listen          80;
    server_name     www.domain.com;
    charset utf8;

    access_log logs/access.log  main;

    location /seo/ {
        proxy_pass http://111.112.113.114:8888;
    }

    location / {
        proxy_pass http://homeServer;
    }
}

注意: 第一个 location块 中的 proxy_pass 行尾有个 /

www.domain.com/seo/sitemap_index.xml

就会在 www.domain.com 这里直接反代到 111.112.113.114 这台服务器上了。

站长平台只用提交这一个 URL www.domain.com/seo/sitemap_index.xml 即可。

有疑问?

欢迎来信,给我写信

原文地址:https://www.cnblogs.com/vcmq/p/9966662.html

时间: 2024-11-09 00:07:57

Java生成sitemap网站地图的相关文章

DEDE网站地图优化技巧

DEDE网站地图优化技巧-把网站地图生成在系统根目录,利于搜索引擎收录相信 恨多用DEDECMS做站的朋友,为避免将data目录内的东西随便外泄,在robots中将data目录屏蔽了,但是DEDE默认的网站地图却是在 data下,屏蔽掉这个文件夹的话搜索引擎就无法抓取到网站地图,这不利于SEO优化,那么有没有好的方法呢,让DEDE生成的网站地图放在系统根目录下 面.答案肯定是有的,下面我就给大家介绍一下DEDE网站地图优化方法. 演示地址 http://www.jfwo.org 下面是详细的步骤

DEDECMS之四 网站地图、RSS地图

在用织梦CMS做网站的都知道,在它的robots.txt是屏蔽掉了data目录的,可是,不巧dedecms默认的网站地图是在data下的,为了让蜘蛛更好的爬行,有必要将dedecms生成的网站地图放在系统根目录下. 怎么样才能把织梦dedecms生成的网站地图放在根目录下? 一.模板位置 站点地图的模板:/plus/sitemap.htm rss地图的模板:/plus/rssmap.htm 准备:登录网站后台,找到文件管理器,或进入ftp,在根目录下建立rss文件夹 二.修改网站地图路径 1.修

sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页.最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间.更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站. 目前有两种格式 一.Google SiteMap <urlset xmlns=“网页列表地址”> <url> <loc>网址</loc> <lastmod>2005

.net 生成网站地图 sitemap.xml

1.此处为Demo,借鉴别人的生成 xml //创建xml文件方法一 protected void btn1_OnClick(object sender, EventArgs e) { XmlText xmltext; XmlDocument xmldoc = new XmlDocument(); //加入XML的声明段落 XmlNode xmlnode = xmldoc.CreateXmlDeclaration("1.0", "gb2312", null); xm

如何制作网站地图(sitemap.html和sitemap.xml)?

总所周知,一个网站的网站地图非常重要,也是SEO站内优化的其中一个基本步骤,可总有人跟我咨询,到底如何制作网站地图,其实很简单,网站地图分为:sitemap.html(百度搜索引擎)和sitemap.xml(谷歌搜索引擎),还有一种是txt形式的,这里不做考究.下面我就给大家提供两种网站地图的制作方法,供大家参考. 1. 在线制作网站地图(WEB版本) 在线制作网站地图步骤非常简单,打开以下网址即可在线制作:https://www.xml-sitemaps.com/ 最后,点击:Start,即可

米扑科技的开源项目:sitemap-php 自动生成网站地图

米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml) 封装简化了许多功能模块,现在分享出来,源代码可在Github上下载,有简单的示例. Github 开源网址: sitemap-php What is sitemap-php ? sitemap-php 是一个轻量级.简单快速生成网站地图的开源项目,由北京米扑科技有限公司(mimvp.com)开发分享. 通过简单的配置定义,一个函数createSitemap(),可自动生成sitemap.x

织梦dedecms中html和xml格式的网站地图sitemap制作方法

sitemap是网站上各网页的列表.创建并提交sitemap有助于百度(Google)发现并了解您网站上的所有网页,包括百度通过传统抓取方式可能找不到的网页.还可以使用sitemap提供有关你网站的其他信息,如上次更新日期.sitemap文件的更新频率等,供百度 (Google)spider参考. 百度(Google)对已提交的数据,不保证一定会抓取及索引所有网址.但是,百度(Google)会使用sitemap中的数据来了解网站的结构等信息,这样可以帮助百度改进抓取策略,并在日后能更好地对网站进

网站地图sitemap

网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指路,增加网站内容页面的收录概率.网站地图一般存放在域名根目录下并命名为sitemap,比如http://www.liujiangblog.com/sitemap.xml. 一个典型的sitemap,其内容片段如下: This XML file does not appear to have any

django网站地图sitemap

网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指路,增加网站内容页面的收录概率.网站地图一般存放在域名根目录下并命名为sitemap,比如http://www.liujiangblog.com/sitemap.xml. 一个典型的sitemap,其内容片段如下: This XML file does not appear to have any