SEO spammers wearing a printout of my face as their mask

Screenshot 2018-01-19 12.29.03

Over the past year, I’ve cut way back on my plethora of wacky domains used on long-lost web projects. I’ve let loads of domains go and only updated the few I still use or need. As a result, most projects have been lost to the ether but there’s a good enough record of them in The Internet Archive’s Wayback Machine that I started to feel OK about it. But this week I learned one of the long-running projects I let lapse ended up in a particularly strange state.

Ten Years of My Life was one of my earlier projects, started in 2003 as a photoblog I intended to run for a decade, which seemed ludicrous at the time (there was no Flickr, no Google Photos, no real photo hosting of any kind in Fall of 2003). I built it out of Movable Type, made sure URLs were as short and stable as possible, and began posting my favorite photos. I had a backlog of great shots, so it was daily at first.

Within the first week of launch, it started to gather mentions on other blogs, and people immediately gathered that I wasn’t just doing a photoblog for ten years hence, but I would be doing it daily (I never intended this) but being young and stupid, I took it up as a challenge, and from then on out, it was daily.

Reality caught up with me about two years later, when my daughter was born and being able to casually spend 15 minutes each night tweaking my favorite daily shot in Photoshop became too tall of an order. Those first couple years were incredibly instructive to me, I went from terrible amateur photographer to vaguely better amateur photographer and began to understand how light and lenses worked.

Since late 2005, the site sat in a holding pattern. At first, I went to a favorite weekly photo, but it quickly became less often than that. Post-iPhone release in 2007-2008, I tried to streamline posting by removing all friction. In the end, I had it working where I simply needed to upload a photo to Flickr, tag it with a special tag, and it would automatically import to the blog as a new entry. Even with all the speedbumps smoothed over, I was posting a new photo an average of 3-4 times a year.

As a result, the project always felt unfinished and unrealized and it bummed me out a bit, but I also had half a dozen other things going on, as well as a growing family member that thankfully took more of my time.

Fast forward to two months ago, at the 14 year mark, I felt like it was time to finally let go. I hadn’t touched or even loaded the URL in a couple years, and I felt like whatever guilt I had about not fulfilling the original goals for it were long since passed. As you can guess, the URL was snapped up and repurposed by domain squatter/SEO spammer types.

I’m not going to link to the site, but here’s a couple screenshots. For some odd reason, they copied a handful of posts from 2004-2005, took my text descriptions word-for-word, then added a generic image (likely gathered from Google Image Search) related to the titles. You end up with weird stuff like this, using the exact same URL pattern I made in 2003:

Screenshot 2018-01-19 12.35.05

They took these tactics to hilarious ends when you see the About page, which is an about page I had last touched around 2010, along with a random cycling image they found.

Screenshot 2018-01-19 12.35.21.png

I’ve had domains lapse and fall into strangers’ hands in the past, and sometimes they tried to put up related content to what was there previously, but this time, making a copy of a half-dozen pages and inserting random images to match was a new low to me.

Does Amazon enable comment spam?

Comment spam has been around for many years now and I've seen all the tricks of the trade blasted at me and my sites. Lately, it's gotten tougher and tougher to weed out every last bit of spam because it's clear comment spammers are hiring people to write somewhat on-topic comments and then loading either their username or the comment with links to their sites (which are loaded with ads).

Here's an example of what I'd call a high quality comment spam:

Screen shot 2010-02-20 at 8.33.28 AM
It's on topic, it seems like an innocuous pat on the back in broken english, but the username links to a video game fan site. The comment was posted to get a backlink to their site. Sometimes they copy and paste two sentences from my own post as a new comment, but usually it's a mellow "this is a good post" comment meant to fall under my radar and eventually improve their Google ranking for whatever keyword they are chasing.

I started thinking about how people are farming out this "make an innocuous comment and link back to my site" work and I was reminded of Amazon's Mechanical Turk system where you pay humans to perform piecemeal work, often for mere pennies. A couple years ago, ReadWriteWeb noticed somewhat spammy activity on the Turk system so I decided to run the same searches today and found similar results.

  • 29 results for "bookmark" including people asking for comments on their site and posting their site to every social bookmark system, some paying as little as a penny per job.
  • 42 results for "comment" including lots of rate and comment my youtube videos up, test our comment system, and flat out "leave a good comment on my site" jobs.
  • 18 results for "digg" including people asking digg votes as well as posting their site to digg for them.
  • 13 results for "write a paragraph" These frequently become posts on adsense-loaded sites and other SEO nonsense.

I'm sure there are bigger sites that enable these kind of bottom-feeder transactions on the web. I bet there are whole black hat SEO forums and marketplaces to buy links, comments, and articles, but it's kind of a shame that two years after ReadWriteWeb pointed out the problems they still persist. I love using Amazon as a customer and I think the Mechanical Turk system is pretty cool, I just wish they did a better job eradicating this kind of thing that leads me to have to judge all my incoming comments harshly as defaulting to spam unless they seem like honest additions to the conversation.

I’ll miss you, Brad

“I try to be my own hero. That may sound flippant, but 15 years ago when I was really trying to grasp a direction for my life, a friend wise beyond his years reminded me that no one is perfect, that heroes fall and white knights on horseback are rare. Instead, he said, I should identify those qualities I found heroic and good and valuable in anyone I admired, and cultivate them in myself. “You won’t always succeed,” he said, “but you’ll be better for trying. Losers sit and wish. Heroes try. Be your own hero.”

It ends up, though, that most of the admirable qualities I want to have I saw in my father. He was the smartest man I’ve ever known and understood better than most the difference between education (of which he had little) and knowledge (of which he had much). He was incredibly gregarious, could always find something to talk about — at length — with absolutely anyone and in conversation with him, you always felt as though you were the absolute center of his universe right then. Dad had a story about everyone, and I never met anyone who knew him who didn’t have five or ten about him.

There’s a quote by Mark Twain, something along the lines of “You should endeavor to live your life such that when you die, even the undertaker will be sorry.” The procession of cars at my dad’s funeral stretched out four miles and, yes, the usually stoic funeral director cried. I should be so lucky. “

-Brad Graham, May 2001

Via Neale’s interview with him. RIP Brad.

Dear PR people: How to Pitch Bloggers

In the wake of my previous post and Gina’s PR blacklist that sprang from it, it seems like a good chunk of the PR industry is blogging about the things they should and shouldn’t be doing, but I’m not seeing a lot of practical real-world solutions that would work for bloggers getting pitched. All the advice has come from the PR side of things so it’s all about how they train employees, how they do their work, and why their work is vital to bloggers (newsflash: it often isn’t).

So in the spirit of extending an olive branch to the PR industry, here are some very basic tips I haven’t seen anyone mention elsewhere:

1. Don’t ever send a press release to a blogger based on a purchased list
I keep hearing about this thing called the Bacon/Cision list and how all the bloggers complaining about getting spammed are on it (the idea of someone selling a list with my email on it is another matter). As many PR people have stated, connecting PR and bloggers should be a connection made via reading their blog and contacting them with a personal note at the very least. Adding 200 names to a bcc: list on an emailed press release because you got 200 blogger emails from some list is the absolutely wrong way to go about it. Don’t ever do this.

2. Go beyond the press release
The rare, few times I’ve felt like enduring all this PR hassle was worth it was when someone from a company contacted me with an invite to preview a product, try out a site, and/or obtain a review item. A press release is the thing I line the bird cage with, a review unit is something I can actually use for a week or two and get a full review story written ready to publish on the day your client launches the product. I can’t stress it enough that a press release sent to me is just plain noise and totally and completely useless. Or if you must, at least just send me a link to one in case I want to learn more about the news you are sharing instead of pasting 2,000 words in ALL CAPS into an email.

3. Introduce a feedback loop!
I’ve never been contacted by anyone in PR that bothered to follow-up with me at any point in our “relationship”. I just get a bunch of press releases emailed to me again and again, often by the same people. If you’ve hand-picked out some bloggers covering topics you have clients releasing news about, at least check with the bloggers after a month, or your second message, or some other regular interval. Ask them if the PR they’ve been receiving is helpful and if it should be tweaked, or even ended if it’s not useful.

4. Provide an unsubscribe link
This is totally bottom-of-the-barrel, least-you-can-do-to-appease-bloggers stuff here, but at the very least provide an instant, no-humans-required way for a blogger to remove themselves from contact they aren’t getting anything but frustration from. About 1/4 of the PR email I get is managed with some sort of list interface and provides this option, and I use the option when off-topic, all-caps press releases get blasted my way. I prefer a no-humans-required option because I’ve asked people at an agency to remove me and they said they had and sorry for the inconvenience, only to be emailed by the same person two weeks later.

5. Use metrics to help you do your PR job
If personally emailing a bunch of bloggers with personal messages sounds like a lot of work that doesn’t scale, try using metrics to help you figure out what works and doesn’t. Right now we have the annual “did my PR firm show up on a blacklist?” metric, but if you implement the suggestions above, keep tabs on what percentage of receivers clicked on a link to read a press release (are your press releases effectively written?), figure out what % click on an unsubscribe link (how effective are you targeting bloggers), figure out how often the bloggers you contact ever write about your clients (how effective your PR/blogger strategy is) and when they do was it because of a press release or did you give them something more (to figure out if newer non-traditional approaches are working better).

update: Just to be clear here, I’m not asking for bloggers to be treated differently than journalists in other media because we bloggers are a cranky lot that can harm your company with a snide blog post if you do things wrong — my point in treating bloggers differently is that bloggers can often publish perfectly informative, up-to-date blogs without PR, instead relying on RSS, other blogs, Google News, and link aggregators to find news about topics they are interested in.

I published multiple blogs for five years before I got my first unsolicited press release, and if PR people want to stay relevant, they need to acknowledge that bloggers work in an information-rich environment filled with millions of choices and as a PR person you really need to be adding some value to their approach instead of taking time away with off-topic press releases emailed to them.

Stop asking, start filtering

PR filters I know it’s a cliché as a blogger to complain about public relations flacks sending you giant PDFs and weekly emails on topics you don’t care about, but recently I noticed my tried and true polite email saying:

Please remove my email address from your PR lists.


totally stopped working. Turns out that a lot of these PR companies have a single database of random blogger emails they’ve snarfed up, but each employee seems to maintain their own personal list. When I ask Alice at PR to remove me, I noticed a week later I got another PR blast from Bob at PR. Then Steve at PR hits me again a day later.

So for now, I’m moving to filters in Gmail. The entire PR agency domain goes into the From: and you set it to delete immediately. Instantly, no more PR spam from Alice, Bob, or Steve, forever, and I don’t have to ask to opt-out of something I never opted into.

And to people working in PR, some bloggers do seem to post the things you send, but in four years of daily PR email blasts that now number in the thousands, I recall one or two being something I was actually interested in. That’s about the same success ratio of general email spam over the past 10 years for me.

update: I was thinking of posting my own blacklist of annoying firms, but it looks like Gina from Lifehacker beat me to the punch.

And to PR folks reading this post, I left a comment describing my dream scenario for how PR people should interact with bloggers:

the perfect PR person would match me up with topics I write about and when they figure out a perfect product pitch I might be interested in, email me personally once to share it, and ask me for confirmation if I’d like to get future email from them. Unless I reply back with a “yes” don’t add me to a list or pitch me again — it’s a not a good match and is only going to build frustration on my end if you keep sending unsolicited pitches.

Another update: I’ve written some tips on How To Pitch PR to Bloggers

Bottom line, all weblog apps suck in some way

I spent most of the weekend elbow-deep in weblog archives and templates, trying to update my site to MT 4.01 and WP 2.3.2 (the former required the latter to export/import). After several hours, I started looking at Expression Engine and Tumblr and even considered Blogger to run this site. After getting fed up with shortcomings, I thought I’d describe my dream weblog engine instead.

For anyone that designs and builds a blog app or CMS, consider the following as typical use cases and design technology around these experiences. As a user, it feels like blog app design is instead about picking technology first and asking users to design their usage around that.

Admin Backend

When you’re working on a blog post or setting up a blog, the backend of the application should be as close to the database as possible. A blog backend is almost by definition very low-traffic (especially with a single author) and there should be no impediments between having a thought and pushing a publish button. Most every app I’ve used is too slow in this regard, so even if you have to use another technology or application design from your blog publishing core functions, keep the backend as fast as possible.

Here’s a design goal: writing a sentence, pressing publish, and seeing it live on the site should take a handful of seconds. Writers should never have to stare at a spinning graphic for a minute as they wait for the publishing engine.


Here’s how most designers interact with templates: They work on a layout for a day or two (in photoshop and/or plain HTML/CSS), implement in whatever blog code the system requires, then they tweak it 100s of times over a few hours until it is done. Then it stays the same for anywhere from three to twelve months until a new theme/design inspiration comes along.

I personally like tweaking templates in a text editor, directly interacting with files on the server (as opposed to within a web app window, having to regenerate to see changes). I also prefer not to see the guts and/or technology of the blog CMS. Abstract it with output tags that don’t require knowledge of programming languages. Keep application logic out of the layout whenever possible, and allow minor tweaks in simplified tools (clicking options in a widget editor) instead of requiring template changes.

Simplicity is golden. The fewer templates, the better. Blogger wins in this regard by allowing an entire site to be laid out with a single template file and some CSS. MT4 is kind of a nightmare in this regard with seemingly dozens of templates, sub-templates, and sub-sub-templates that can be tweaked.

My ideal template engine would be as simple as possible and allow me one general template to control layout, maybe a few specific templates for specialized output (an entry with comments is different than a list of archived posts), and allow for fast tweaks until the design is done. When a template is “done” convert it into some stable package the CMS can use and that I can share with others easily as an archive.


There really should be a standard of some sort that blog CMS companies can agree on for export and import. Users of blog engines shouldn’t be hostages to their applications. Data exit and entry is problematic in everything I’ve used and it’s a shame. Blogging is supposed to be fun and I prefer to be agnostic about what tools I’m using, so it’d be nice if I could change blog engines every three months without too much friction. I won’t even go into how every engine has its own URL scheme — it’d be nice if I could keep my permalinks forever, even as I change blogging apps.


Every blog engine seems to suffer not only from poor documentation, but also extensions, template designs, and tutorials are almost always spread out across multiple sites (often out-of-date). If I download a blog CMS from Site A, plugins for it are on Site B, but they link to Site C where you can download things (but documentation for the plugin is back on Site B). Every blog engine seems to also have internal battles between “here are the free tools for your blog” and “here are our professional services for your blog” that leaves me wondering where to find more info or extensions after I download. Then there are random people that just setup galleries of plugins and templates that often rival or surpass the blog engine company’s version of the same. It’d be nice if there was a way to find those as well.

My ideal blog engine company would hire some seasoned blogger and technical writer to be a documentation czar, keeping docs up to date when new versions are launched, produce screencasts for introductory users, and provide complete documentation at a stable URL that applies to every version of the product. If an outside site does a better job of collecting and offering templates, a documentation leader should recognize that and link to them in highly visible places. There doesn’t seem to be anyone internal at these companies fighting for the users to make sure they can keep being informed about how to best use the product.

Server Load

I’ll admit I like simple, live code editing of my template files (as described above) when I’m tweaking a design, and I love fast admin screens that let me post instantly, but once a post is up, it’s just text on a web server and should exist as a flat file. I’ve clicked through way too many digg links and popular links only to end up at database connection errors or too many user errors on servers that can’t handle the load. I know building a perfect cache is hard to do, but failure of your site at the most visible and important time for you should never happen.

Anyone got any other ideas of how to build the perfect blog application?

Trying something new

I’ve been meaning to redesign this site for a while, to set aside more screen space for writing, both to make it easier to read longer pieces for readers but also to help me focus more on just plain old writing instead of all the other junk I used to keep here. As I sat down to think about how I could wipe out what I had and start over again visually, I kept coming back to all the cool WordPress themes I’ve seen lately, including the one you see powering this site.

Now, I would consider Ben and Mena Trott to be pretty close friends and I’ve helped write a book on Movable Type tweaking. I still use it for several other sites and don’t plan on changing, but when it comes to personal websites, I’ve always wished for a simple way to share MT templates either through actual files or the API. I’ve requested it from SixApart for the past 3+ years and in the meantime, WordPress came along with Themes and eventually every good web designer that wanted to see their work shared with millions flocked to it and started offering up downloadable Themes.

A few months ago when I was praising Vox I said I never wanted to work on another blog template file again and I was serious about that. WordPress has a great theme system and while I think editing php templates is an even worse idea than custom Blogger/MT tag templates, I don’t have to thanks to the thousands of free theme packs available online. I was somewhat reluctant to jump to WordPress until I saw some 2.0 screenshots and heard good things from longtime MT-using friends. The last time I used WP, I had a lot of problems with the admin editing backend. I noticed a few things have been fixed but a lot of things still got stuck.

Here’s a list of hang-ups I found when converting over. Some might read these and feel it’s nitpicking or criticism, but I consider these bug reports:

    • When searching google for info on importing a MT blog, I ended up at with some instructions I followed only to find out the entire system has changed with the latest release. Since the docs are on the server, they should be updated to say “the following is for the 1.x version of WordPress, go here to see Importing tips for WordPress 2.x” or something like that. Adobe/Macromedia is great about this — anytime I hit an old Coldfusion docs page I see a pointer to the latest version of that page for the latest release.


    • I had to split my exported MT blog since PHP had a 1Mb upload limit on my server. That’s a drag (I had to ask a friend how to do that) and I wish it used the API instead.


    • To activate Akismet, it said I just needed an account (not a blog) at to get an API key, but I couldn’t get an API key unless I got a blog, which seems like a waste (and possibly a way to artificially inflate the subscription numbers at or something).


    • Plugins are activated in the Plugins area, but not set up there. Why? It makes no sense to me to activate something on one page, but have to jump to a submenu buried in the Options area to change settings on it. Why isn’t there a Plugin Options submenu in Plugins? And why instead is there a way to tweak the actual PHP of the Plugins? Does any normal user really need that? Oh, it looks like Akismet is configured in the Plugins area, but nothing else I’ve added is.


    • Where can I turn off comments by default on new posts? I don’t see it anywhere in the Options area (I found it under Discussion options, which I guess is more specific (though I would think putting in the Writing options would make more sense) though the checkbox describing it sounds confusing to me “Allow people to post comments on the article” when really I want a “comments enabled/disabled by default”. Fixed.


    • I don’t see anywhere to turn off or on Pings/Trackbacks system-wide or set defaults for it. Fixed.


    • The feedburner plugin I installed doesn’t auto-forward requests to Feedburner. I don’t think it works well with a pre-existing Feedburner feed. I’m going to have to edit my .htaccess or templates to do it. Fixed: it worked five minutes later.


    • Some custom styles (simple floats and margins) I applied to images in previous imported posts appear to be stripped on import. Dunno if that’s MT or WP’s doing.


    • After I publish a post, I get sent to a blank Write New post page. Why not jump me to the edit page on the thing I just posted? Also, I see that the Manage page still has the Edit screen linked on one teeny tiny link marked Edit. The “View” link made me think that would allow me to view the post in the Manage interface, but instead pops me out to the live post on my blog. Why not link the full title of the post to the editing interface? Why else would I be in the Manage section unless I wanted to edit/delete my posts?


    • Why isn’t the Categories widget expanded by default? Why do I have to tweak that every time I make a post? Why is “Uncategorized” an actual category?


    • In the wysiwyg interface, when you go to add a link, the popup has two buttons at the bottom, one to insert the link and the other to cancel. The Cancel button is on the lower right, where all the save buttons are located in WordPress, but you have to click the one on the left instead to actually save it. Intuitively, I almost hit cancel every time.


    • Widgets are kind of a mess. I had to download it and activate it like a plugin, then go to Presentation to edit (another weird plugin on one page, options on another). There’s no Flickr widget by default even though the first Google results for flickr widget say it is included. My other results ended up with 404s on download sites. There doesn’t seem to be a user-friendly widget gallery, as the plugin itself dumps me into some programmer widget trunk page which makes no sense.


    • My Archives page is a 404, and I have no idea where to find the actual page. Fixed.


    • The wysiwyg interface rewrites any custom CSS I try and add to an inline image. This is broken and needs to be fixed.


Top 10 Reasons Why Your 5 Tips About 7 Cutting-Edge Technologies will annoy me

FirefoxScreenSnapz002.png Seriously, the top of digg, delicious, reddit, and every other link aggregator seems to be clogged with Lists of Vital Things You Should Know.

After seeing dozens of them fly by every single day, I’m starting to think it’s just lazy headline writing that gets promoted up thanks to our nanosecond attention-span RSS readin’ latte drinkin’ ruby on rails codin’ getting things done task managin’ nerd culture.

Cool it with the lists. Feel free to use real paragraphs and explain stuff. I have time.