Redirection, Dynamic Systems & Search Engine Rankings

So I’m working on ways of making Pencilcase links more friendly. Currently, a link will look something like: http://www.policyalternatives.org/index.cfm?call=FBA87762&act=main, which is fairly usable by computers, databases, robots, etc. However. as for human readability, it has some way to go. So I’m investigating ways to make human-readable, or friendly links work, but also still be nice for search engines and their rankings (as inevitably, because they’re human-friendly links, they’ll be used more).

There are numerous ways of doing this sort of thing, given the advantages I have of being able to either server-side or client-side script this. Read on to see my thoughts,and hopefully, contribute yours

There are several ways I can do this:

  1. I could use 404 scripting & an index table of pages, so that when a user goes to a page that doesn’t exist, a query is run to find if the requested page matches a database, and if found, loads that page. I don’t like this option much because it skews stats for customers.
  2. I could “search-engine-safe” URLS, an old scripting hack, whereby the query string becomes a URL page (http://www.policyalternatives.org/index.cfm?call=FBA87762&act=main becomes http://www.policyalternatives.org/index.cfm/call/FBA87762/act/main/index.cfm). Which works for search engines, but certainly isn’t any more usable by humans, so that’s out.
  3. I could have the DB simply spit out pre-generated static pages with their content, and have the site use those. However, by doing so, you lose a lot of potential interactivity. The CCPA’s site, for example, has all sorts of pages that you can dynamically resort for viewing – which wouldn’t be possible with this option, so that’s out.
  4. Or, and this is the option I think I’m going with, I could create “stubs”. Stubs are essentially empty little static pages that will in some form or another redirect to the actual dynamic page. This has the problem of creating potentially thousands of tiny pages on the server, but as long as they’re appropriately created/deleted, it shouldn’t be a problem, as physical space is so rarely an issue on web servers these days

The method decided upon, I need to figure out how to redirect to my dynamic page, through one of several methods:

  1. On the client site, I could use either javascript, or a meta-refresh tag. However, these both send 302 header codes, which means a temporary redirection. Most search engines these days view this as spamming them, if the redirect is under 30 seconds. So client-side scripting is not a good option, I feel.
  2. Going server side, I have several ways of doing this with Cold Fusion. The most basic way is to use <cflocation> to redirect to my page. However, <cflocation> also sends a 302 header, and Search Engines will pick up they’re being redirected, so doesn’t seem much better option (although I’ve been told that using <cflocation> is ok by search engines, because it’s not a ‘true’ 302 header
  3. So if that doesn’t work, I could use the combo of <cfheader statuscode="301" statustext="Object Moved"><cfheader name="location" value="http://www.policyalternatives.org/index.cfm?call=FBA87762&act=main">, which will send a “permanently moved” message via the header (the 301). Which is fine, except now the search engine will think the true URL is the dynamic one (which it is), while humans will continue to use the friendly one, so links won’t really help the rankings.
  4. So I’ve so far settled on the idea of using <cfinclude> to simply set the required URL variables and call in the dynamic page. This has the advantage of not requiring any redirection at all – the URL, for all intents and purposes, will be the name of the stub. Indeed, in the site’s dynamic menu, I could use the stub’s name consistently to further help with search engine link-ranking. On the downside, due to the nature of <cfinclude> & how I’ve coded the Pencilcase CMS, all the stubs will need to be sitting in the root directory, so there’ll be no site heirarchy created. I’m not sure how much of an issue this is, apart from when FTP’ing, but it bothers me. It’s possible that with some creative work I’ll find a way around this, but who knows!?

So there’s the decision I’ve made, while writing this, actually, on how to build my human-friendly links system: with <cfinclude>. If any of you have any thoughts or suggestions, please let me know. Ideally sooner, rather than later, so that I don’t develop an entire system, only to learn from your collective genius that I should’ve used another means.