Google Sitemap.xml

(Difference between revisions)
Jump to: navigation, search
 
m
Line 7: Line 7:
 
* sitemap_change_frequency : how often the resource changes (weekly by default)
 
* sitemap_change_frequency : how often the resource changes (weekly by default)
  
 
+
<code lang="java">
<pre>
+
 
<?xml version="1.0" encoding="UTF-8" ?>
 
<?xml version="1.0" encoding="UTF-8" ?>
 
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
 
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
Line 69: Line 68:
 
%>  
 
%>  
 
</urlset>
 
</urlset>
 
+
</code>
</pre>
+

Revision as of 12:38, 27 June 2008

The following code will recurse down a directory tree, generating a sitemaps.org compatible sitemap.xml file. You can submit this to google, yahoo, and microsoft, and control how they index your files (including finding links to files that aren't available through text links the spider can read. The protocol names the resources and tells the spider the last time they were modified, improving search spider efficiency.

It respects a set of properties (which inherit, so you only need to set them at a folder level to change the elements within):

  • sitemap_hidden : Hides the resource from the sitemap
  • sitemap_priority : sets the prioertiy field (1 by default if not otherwis set)
  • sitemap_change_frequency : how often the resource changes (weekly by default)
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<%@ page session="false" %>
<%@ page import="java.util.*,org.opencms.jsp.*,org.opencms.file.*,java.text.DateFormat, java.text.SimpleDateFormat, org.opencms.main.*" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
 
<%!
protected String BASE_URL="";
public static SimpleDateFormat ISO8601FORMAT = new SimpleDateFormat("yyyy-MM-dd");
private String recurseTree(CmsObject cmso,CmsJspActionElement jsp, String path)  {
	StringBuffer sb = new StringBuffer();
	try {
		ArrayList files = (ArrayList) cmso.getFilesInFolder(path);
		Iterator i = files.iterator();
		while (i.hasNext()) {
			CmsFile f = (CmsFile) i.next();	
			String thispath = jsp.link(cmso.getSitePath(f));
			CmsProperty secret = cmso.readPropertyObject(f,"sitemap_hidden",true);
			CmsProperty changeFreqProperty = cmso.readPropertyObject(f,"sitemap_change_frequency",true);
			CmsProperty priorityProperty = cmso.readPropertyObject(f,"sitemap_priority",true);
			String changeFrequency = changeFreqProperty.getValue("weekly");
			String priority = priorityProperty.getValue("1");
			if ((secret.getValue("false") == "false") 
				&& (thispath.endsWith("html")||thispath.endsWith("jsp")||thispath.endsWith("pdf"))) {		
				sb.append("<url>\n");			
				sb.append("<loc>"+BASE_URL+thispath+"</loc>\n");
				//DateFormat df = DateFormat.getDateInstance();
				String niceDate = ISO8601FORMAT.format(new Date(f.getDateLastModified()));
				sb.append("<lastmod>"+niceDate+"</lastmod>\n");
				sb.append("<changefreq>"+changeFrequency+"</changefreq>\n");
				sb.append("<priority>"+priority+"</priority>\n");
				sb.append("</url>\n");
			}
		}
		ArrayList folders = (ArrayList) cmso.getSubFolders(path);
		Iterator j = folders.iterator();	
		while (j.hasNext()) {
			CmsFolder f = (CmsFolder) j.next();
			sb.append( recurseTree(cmso,jsp, cmso.getSitePath(f) ) );
		}
	}
	catch (CmsException cmsException) {
		sb.append("A CMS exception occurred: "+cmsException.toString());	
	}
	return sb.toString();
 
}//the close / open delimiters are necessary
%>
 
<%
 
CmsJspActionElement cms = new org.opencms.jsp.CmsJspActionElement(pageContext, request, response);
CmsObject cmso = cms.getCmsObject();
String url = cms.info("opencms.url");
int lastSlash = url.indexOf("/",8);
BASE_URL = url.substring(0,lastSlash);
out.println (recurseTree(cmso,cms, "/"));
%> 
</urlset>
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox