It's not just for shortening urls it's also for deciding where your search engine scores go. So to take an example from a googler at a recent conference say you have an online store that has a bunch of categories. Someone wants to buy a red bag and they go through bags then to red and pick item 5.
/bags/red/5
Someone else goes to red things then bags than item 5
/red/bags/5
You end up with duplicate content issues and the possibility of having your search engine score split between the two pages.
With canonical you can say on both pages that /items/5 is the real url and thats the one that will get the search score + be indexed most likely.
All you have to do is set up a rule to have the screening terms in a certain order. We did on Dawdle in like a day when we realized our in-stock item screening presented the issue: http://www.dawdle.com/search.php/
I was pretty convinced that canonical was a solution in search of a problem, but at least joshu's opening salvo, the DiggBar brouhaha, and the resultant conversation has shown one use for it.
It leads me to wonder, if google is as smart as most people see them as, why don't they make an attempt at working this out, or at least defining a way to deal with it themselves?
They kind of do but this gives site owners a method to instruct Google on what they want stored about their sites. You can't figure that out with an algorithm.
Someone else goes to red things then bags than item 5 /red/bags/5
You end up with duplicate content issues and the possibility of having your search engine score split between the two pages.
With canonical you can say on both pages that /items/5 is the real url and thats the one that will get the search score + be indexed most likely.