CF Camp Notes: SEO 101

SEO 101
Maximilian Kwapil

2 parts to SEO
1. Search Engine

Resources from Google:

SEO Starter Guide

Webmaster Guidelines

Webmaster Tools (WMT)

Also, Matt Cutts

2. Optimization

what is there to optimize?

on page and off page

on page = optimize the html
off page = everything else (links from outside, social sharing, etc)

the most important thing
have to have good content in order for google to rank the site

GREAT content is better, of course
but it's difficult for search engines to measure
how do SE's know if the content is good or great?

various measures / metrics --
word count, multimedia (if it relates to the content), bounce rate (how many users bounce back to google after hitting your site), time on page,

off page
it's about sharing
links from outside, social networks, those are the best things

"Real Company Shit"
Wil Reynolds
great talk about companies writing things that get shared almost automatically because the content is THAT good.

on-page optimizations (code stuff)

the URL itself
SEO URLs aka "speaking URLs"
page content should be apparent from the URL

make categories browse-able
good for readers
good for bots
query string = user input

URL not available?
site move, old pages, deletions
404s are ok if deleted / retired content
500s should NEVER happen
for everything else, use redirects
301 = permanent redirect. USE IT.
tells SE it's moved and SE should use the new page instead next time.

view plain print about
1<cflocation statusCode="301" url="..." />

302 = temporarily redirected. AVOID THIS.

404s and 500 also in Google Web Master Tools. it will tell you which pages result in a 404 or 500 on your site.

meta tags
title and description are most common
<title> becomes title in Google results (or other SE's)
description becomes the description in SE results

if user searches something ELSE that's not in your "description" but IS somewhere else on the site, Google will change the "description" in SE results to match the searched term / area of your site.

"description" serves as a fallback for Google Plus

not really used by Google any more
not ranked, nor used as an indicator of the content

bots are smart enough to parse content and see for themselves which words are important
bot views many pages as "news" that aren't actually "news"
so use googlebot-news and "no index" to tell it that a page doesn't actually have "news"

canonical URL
"main" url for the current page
why? duplicate content = bad
if 1 piece if content is available via many URLs b/c both users and SE's get confused
sometimes it's unavoidable
for basic things like www/non-www, just use 301 redirects

rel="canonical" to point to view all page
paginated content with rel="prev" and del="next"
they designate previous and next pages from where you're currently at.

view plain print about
1<link rel="prev" href="page1.html" />
2<link rel="next" href="page3.html" />

Open Graph
enables any web page to become a rich object in a social graph
developed and mainly used by Facebook
there is an Open Graph debugger
-paste your uRL in, it will tell you how your page will look when integrated with Facebook

Google Authorship
2 types. Publisher and Author
Publisher - the creator of the site itself
Author - author of the article/content on the site
(1 site/publisher can have many different authors)
Trusted authors and publishers are "preferred" in Google results

1 of several formats to designate page content
used by several SE's -- Bing and Google
"harmless" markup -- can put it in existing code and it doesn't alter the design
-lots of documentation there
marked up content w/ schema
review - add the "star review rating" in your SE summary results
searchAction - users and (for instance) search your content right from the Google results page
events - can specify, say, calendar dates in your SE results, etc.
Google's Rich Snippet Tool
-- past in the content
gives a "report" on what it found for the site and the schema being used, etc.

other things --
meta "robots"
tells SE's if the page should be followed or indexed (or neither)

if your site is available in multiple languages, can use "xhreflang" meta tag to tell SE that multiple languages exist for this site

linking to your app
obvious way -- link to your app in the App Store -- will show a banner at the top of your site saying "a mobile app is available, want to get that instead?"

Android: app indexing and links to app in Google SERPs

Loading times play a role in SE
-- keep it low, it's an advantage for the user. Also good for bots b/c they can crawl your site faster. Bots have a limited amount of time/space available for your site.

Use compression and caching

tends to be overlooked
controls Bot crawling for the whole site
can disallow private/irrelevant pages or directories
can specify XML site maps
especially useful for bigger sites with a lot of content

XML sitemaps
-"guide" to your site
for all types of content
tells SE where all yr content lives
--documentation about these

but in the end, keep in mind...
search engines decide what to show or use
- ranking in the Search Engine Result pages (SERP)
calculated by complex algos

google updates are named after animals
most important are panda and penguin (seriously)
panda - promote site w/ good content
penguin - fight web spam

SEO is part of UX
SEO should be thought about from the beginning of the site

adding SEO on existing pages may be difficult but it's worth it.

resources --

CF Camp Notes: Multiply Like Rabbits

Multiply Like Rabbits - Asychronous Processing with ColdFusion and RabbitMQ
Markus Schneebeli

What is a Message Queue?
order a burger at McDonalds
to get a burger you need a cook
burger goes into the out-tray
to be given to the customer

producer -- cook
queue -- out tray
consumer -- the customer

can produce and send to multiple consumers

"exchange" -- the logic of the message queue
maybe the cook has to pick 1 of several trays to put the burger on

Rabbit MQ is a "Message Queue" product

Competitors --


-- largest # of installations, Apache product, can also store message via JDMC

latest release from Apache, different architecture, supports REST and JSON

jBoss implementation of Message Queue, supports JMS standards

just pick the one that matches your requirements

talks to any language - java, c++, node.js, .net, python, ruby, etc.
easily configurable
multiple protocols

benefits --
really nice Management UI
open source
plugin system for creating your own logic
active community

the big players w/ RabbitMQ
Facebook - ajax loading system which goes thru message queue for the different "sections" of your FB page

50 billion messages / day
almost 600,000 messages / second
(if you put that directly into a database, it'd surely blow up.)
2.8 million concurrent connections on the server

Google Suggestions
all the key typing isn't done by a "real request"
it's put into a message queue, and if possible, you get a request back via Message Queue (in milliseconds)

CF Camp Notes: Command Box, Luis Majano

CF Camp Notes: Command Box, Luis Majano

How do we work in CF?
we look in folders, on the web, etc, for pieces of code.
so we have all these pieces of code from various places
not a lot of order, not a lot of package management / tooling

(Book: Core J2EE Patterns)

What is CommandBox --
CLI abstraction
package manager
REPL tool (read eval print loop)
Integrated server
extensible via ColdFusion ( don't have to know java)

this is not *Box only. works for EVERY CF developer

works for every OS -- win, mac, linux
33 megs
Java 1.7+
still in beta, first release in the next week

it's professional open source. you can contribute if you want

CLI --
ability to execute CFML code
also created an interactive shell ala Grails or Ruby
Usage - OS Execution
Execute CFML Files:
box my app.cfm &
(& runs it in the background, as a background process)

box scripting: *unix
#!/usr/bin/env box
can create shell scripts in CF!

Enhanced Execution
box execute myapp.cfm name=luis

everything is done thru "commands"
that's how you get things done

Commands are separated by namespaces, you can create your own namespaces as well.

Output piping "|"
File redirection ">"
just like other command line tools!

Package Manager --

package descriptor
declares package metadata
-name, slug, version, author, dependencies, devdependencies, installation details, custom meta data

Where do they come from?
file zip/tar
other places too

Cloud package repo
web gui
community driven
145+ packages

Read-Eval Print-Loop
execute code while you're typing it
so from a command line:
a = 3
writeOutput( now() ); the command line and the code executes

type "repl" at Commandbox prompt and your'e in "REPL mode"

Integrated Server --
to take the pain away from setting up a CF server.
integrated w/ Undertow -- full servlet container
keeps track of servers, no WEB-INF needed
server - start, stop, restart, status, etc,
right now only works on Railo but working on CF10 and 11 support for later.

Scaffolding --
coldbox create app "myapp" --installColdBoxBE

just build a script to completely scaffold out an app, with dependencies, testing, etc.

Automation --
run - execute any OS binary
- integrate with grunt/gulp/ant

-enhanced execution
-can accept parameters

-like a "batch" file !#/usr/bin/box
runs multiple commands
can accept parameters
"boxr" extension
can execute boxr from the OS
will have "handles" soon
-- so you can double-click in your OS and execute it that way too

.boxr file contents:
mkdir $1 (positional params just like in an OS)
cd $1
init $1
run git init
touch .gitignore

#create a codebox app
coldbox create app $1 --installColdBoxBE
cold box create handler contacts index,save,delete

then at command line: "recipe my-recipe.boxr MyAppName"

Everything is built via WireBox. That's the "bootstrapper" behind all of this.

To search for new commands:
forge box search norris
finds any commands that include the term "norris" (i.e. the Chuck Norris command)

Roadmap --
next portion is "task runners"
bring Ant / Grunt type power to CF
Adobe CF Engine integration
ForgeBox 2.0 (in a couple weeks)
ForgeBox Enterprise -- for companies that don't want to put things in a public repo. can have it on your own "institution"
More Generators
Automation / Async

Can download it now via

there's a google group and training/support available as well

My CF Camp Schedule

Here's the best guess as to where you can find me during the CF Camp conference:

Monday --

9:15 - 10:30 -- Command Box, Luis Majano
10:14 - 11:30 -- Multiply Like Rabbits, Markus Schneebeli
11:40 - 12:30 -- Dependency Injection with DI/1, Chris Schmitz
12:30 - 1:30 -- Lunch!
1:30 - 2:20 -- SEO 101, Maximilian Kwapil
2:30 - 3:20 -- So, you want to "put Facebook on your site" (or app)?, Kai Konig
3:20 - 4:00 -- break
4:00 - 4:50 -- Secrets of a Mura Code Ninja, Grant Shepert
5:00 - 5:50 -- The next Javascript, ECMAScript 6 for those still using 3.1 and awaiting 4.0, Matt Bourke
6:00 - 6:30 -- Raffle
8:00 - 10:00 -- Dinner

Tuesday --

10:00 - 10:50 -- Hidden Gems in ColdFusion 11, Charlie Arehart
11:00 - 11:50 -- SPEAKING: Best Practices are Best, Except When They're Not, Nolan Erck
12:00 - 12:50 -- Event Gateways, Gert Franz
12:15 - 2:00 -- Lunch!
2:00 - 2:50 -- Get Grulping with JavaScript Task Runners, Matt Gifford
3:00 - 3:50 -- Automate your love letter creation with JasperReports, Guust Nieuwenhuis
4:00 - 4:15 -- Closing remarks

I leave on Thursday and am hoping to fill the rest of the time with some sort of sight seeing around Munich, though I haven't made any plans yet. A friend tells me there's a great guitar store here, which might make for a good Wednesday plan!


CF Summit Wrapup

CF Summit 2014 wrapped up yesterday. I'm currently 35,000 feet in the air, over the Atlantic, on my way to speak at CF Camp in Munich Germany. Yes, I am a glutton for punishment but that's beside the point. :)

Overall I think the CF Summit was a success. I heard no major complaints and everything from my perspective seemed to run rather smoothly. Wifi was near perfect the entire time (both in the hotel rooms and in the conference). Lunch both days was about as good of a quality as one can expect at an event like this (the salad on Thursday was excellent!). I didn't eat anything at the Liquid Lounge party, so I can't comment on that.

Staff and service at the Aria was exceptional. The rooms are incredibly clean and high-tech, the staff were some of the most courteous I've ever dealt with at a hotel, I have zero complaints and may have to book a vacation there some time to take more advantage of it.

I didn't end up taking as many notes as I usually do at conferences. Some of the talks either were more demo-based (which is totally fine) or the slide decks were so complete, that I figure I can just download those instead and save myself some typing.

Of the 2 general sessions, day 1 was my favorite. "How The Best Get Better" included some great insight into ways we as developers can become more successful by helping our clients become more successful themselves. He offered a lot of great (if albeit high-level) tips on ways we can improve and stay motivated and productive. The best take-away from day 2's general session was probably the idea that "we" are the last generation to use a keyboard and a mouse – his kids will go up to his television and instinctively try to touch it as if it were an iPad, etc. There was some time talking about "the internet of things" and how people now have refrigerators that have internet connections; I'm still at a loss as to how I should apply that info to my consulting practice.

Audio / video in the session rooms was great. Staff were very friendly and helpful, they had everything dialed in correctly for me, provided a USB clicker so I could walk around and advance my slide deck remotely. (I was surprised to be speaking in the "big room"! Is my "Dependency Injection" talk really of that much interest? Where else should I present it?)

Session highlights for me –

Jason Dean's talk on new security features in ColdFusion 10 and 11. I always learn something new about security from Jason. He scares me just enough to make me go revisit all my old code and see if I've got any security holes that need patching. His sense of humour also makes the session very enjoyable.

"ColdFusion Is Racecar Fast" was another great one. Mike Brunt and company went over a number of informational bits regarding the JVM, how to tune it, common performance issues, etc. If anybody should write a book on tuning web servers/app servers, it's Mike and his team.

"ColdFusion Internals" was excellent. [NAME] showed exactly what happens behind the scenes when compiling a CF app, and how the code is executed within the ColdFusion engine. He also discussed how these things can affect performance, and some easy ways for us as developers to take advantage of them to increase performance in our ColdFusion servers.

Charlie Arehart's talk on monitoring CF servers was of course great and packed full of useful info, but that's pretty much to be expected at this point. Has Charlie ever given a bad preso? I seriously doubt it. :) This was another one where I took a mountain of notes and left feeling inspired to try out some new techniques.

Other observations from the conference include –

I watched several talks discussing REST. I've used REST in some applications, I understand how to build REST, etc. However I still don't feel like it really beneficial. Yes my URLs all look the same (and they're a tad shorter) but so what? I can get the exact same results with HTTP GET and a little bit of discipline in how I format my URLs. But I digress. Several other people I talked with at the conference seem to feel the same way. I wonder if there is a need for an "Intro to REST and Why it is Actually Useful" preso in the near future?

In my Dependency Injection talk I asked the room to raise their hand if they'd never used DI of any kind before. About half the hands went up (and probably some others just didn't feel comfortable doing so). I got the same results when giving my "Intro to Source Control" talk earlier this year. Despite what some chunks of the developer community believe, "everyone" is not doing these things yet. There is still a need for the "older" and "beginner" topics at conferences, user groups, etc. (On that note, if you want me to speak for your user group, just drop me a line – I'm happy to do so!)

The conference ended with the announcement of CF Summit 2015 (also in Las Vegas) and a raffle for an iPhone 6. My only critique of this was, I didn't see any mention of how to enter the raffle until it was too late. I thought everyone at the conference was entered into the raffle but apparently I missed the entry process (maybe it wasn't advertised well?) But in all fairness, if the only thing I have to complain about is my inability to win a free iPhone, then the conference went over pretty well!

Now if you'll excuse me, I need to get some sleep before speaking in Germany at CF Camp. :)


More Entries

Recent Comments

CF Camp Notes: Command Box, Luis Majano
Brad Wood said: Great recap of Luis' session. Here's a link to his slide de... [More]

CF Objective Recap and Highlights
Jason Dean said: Thanks, Nolan! [More]

CF Objective Notes - What's a Pull Request? (Contributing to Open Source)
Brad Wood said: Thanks for posting your notes! Here the full slide deck too... [More]

CF Camp Notes: Command Box, Luis Majano
Brad Wood said: Great recap of Luis' session. Here's a link to his slide de... [More]

CF Objective Recap and Highlights
Jason Dean said: Thanks, Nolan! [More]

CF Objective Notes - What's a Pull Request? (Contributing to Open Source)
Brad Wood said: Thanks for posting your notes! Here the full slide deck too... [More]

BlogCFC was created by Raymond Camden. This blog is running version 5.9.7. Contact Blog Owner