<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dao By Design</title>
	<atom:link href="http://www.daobydesign.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.daobydesign.com</link>
	<description>Creative, Custom CMS web design services</description>
	<lastBuildDate>Wed, 25 Apr 2012 00:42:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Quickly killing manually submitted spam with Drupal</title>
		<link>http://www.daobydesign.com/blog/tips/drupal/quickly-killing-manually-submitted-spam-with-drupal/</link>
		<comments>http://www.daobydesign.com/blog/tips/drupal/quickly-killing-manually-submitted-spam-with-drupal/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 07:56:47 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[d6]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupal 6]]></category>
		<category><![CDATA[manually submitted spam]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spam moderation]]></category>
		<category><![CDATA[spambot]]></category>
		<category><![CDATA[vbo]]></category>
		<category><![CDATA[views]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=783</guid>
		<description><![CDATA[<p><img src="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-00-200x200.png" alt="" title="drup-manual-spam-00" width="200" class="alignright size-thumbnail wp-image-800" />I run a relatively popular Drupal-powered site that entirely depends on user-generated content. Because the site has a decent amount of clout with the search engines, and because the principle of the site is about sharing links, it tends to get hammered with spam. The vast majority of spam is submitted by bots, which is relatively easy to combat (I use <a href="http://drupal.org/project/recaptcha" target="_blank">reCAPTCHA</a> and <a href="http://drupal.org/project/spamicide" target="_blank">Spamicide</a>). However, and somewhat surprisingly, there is still a solid amount of manually-submitted spam.

By "manually-submitted", I mean someone is actually taking the time to create a (probably fake) e-mail address, registering on the site, confirming the e-mail and then submitting their pieces of spam one-by-one. When last I counted, I receive about 100 to 200 spam content items by this method per week. That the spam never sees the public eye doesn't seem to deter spammers in the least. None of this spam is ever "published" on the site, it is all held in a queue until I can manually delete it. A pain for me, and of absolutely no value to spammers. I'd e-mail them and ask why they bother if I thought it would result in an answer.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-00.png" alt="" title="drup-manual-spam-00" width="300" height="300" class="alignright size-thumbnail wp-image-800" />I run a relatively popular Drupal-powered site that entirely depends on user-generated content. Because the site has a decent amount of clout with the search engines, and because the principle of the site is about sharing links, it tends to get hammered with spam. The vast majority of spam is submitted by bots, which is relatively easy to combat (I use <a href="http://drupal.org/project/recaptcha" target="_blank">reCAPTCHA</a> and <a href="http://drupal.org/project/spamicide" target="_blank">Spamicide</a>). However, and somewhat surprisingly, there is still a solid amount of manually-submitted spam.</p>
<p>By &#8220;manually-submitted&#8221;, I mean someone is actually taking the time to create a (probably fake) e-mail address, registering on the site, confirming the e-mail and then submitting their pieces of spam one-by-one. When last I counted, I receive about 100 to 200 spam content items by this method per week. That the spam never sees the public eye doesn&#8217;t seem to deter spammers in the least. None of this spam is ever &#8220;published&#8221; on the site, it is all held in a queue until I can manually delete it. A pain for me, and of absolutely no value to spammers. I&#8217;d e-mail them and ask why they bother if I thought it would result in an answer.</p>
<p>Under the assumption that my pleas to stop would go unanswered, I decided to sit down and come up with an efficient way of dealing with it. The problem is that the queue could potentially hold submitted material from new users (once a user has submitted good content, they immediately get a role that allows them to bypass the queue), so each item must be vetted as either ham or spam.</p>
<p>A while back I began using the <a href="http://drupal.org/project/spambot" target="_blank">Spambot module</a>, which does a great job. With it you can click a &#8220;Spam&#8221; link on a user&#8217;s profile page and immediately delete them and all their content. What&#8217;s more, you can report them to the excellent <a href="http://www.stopforumspam.com/" target="_blank">Stop Forum Spam</a> service and give the spammers a slightly harder time respamming (or spamming others).</p>
<p>Spambot is great, but slow. To moderate, I need to look at a piece of content, determine if it&#8217;s spam, click the submitter&#8217;s name, click the &#8220;spam&#8221; menu item, select some options and then delete. For intermittent spam submissions this would be fine, but for dozens of spammers every few days, it&#8217;s too labourious.</p>
<p>And so today I came up with a better system of bulk/batch killing mass amounts of manually submitted spam in one fell swoop, and <em>also</em> report the spammers to Stop Forum Spam. The following is what I did and how I did it. Please, <em>please</em> <strong>read the <a href="#disclaimer">disclaimer + warning</a> at the bottom of the post before proceeding</strong>.</p>
<h3 id="howto">How To Do It</h3>
<p>My goal was to create a system whereby I could simply select all the spam content directly from the main list of Drupal content, select a &#8220;Kill Spam&#8221; action from the &#8220;Update&#8221; dropdown and be done with it. So if a spammer submitted 10 articles, I could simply select one, flag it as spam and the system would kill all the content by that user, delete the user and report them to Stop Forum Spam.</p>
<p>First things first, you&#8217;re going to need a few Drupal modules:</p>
<ul>
<li><a href="http://drupal.org/project/rules" target="_blank">Rules</a></li>
<li><a href="http://drupal.org/project/views_bulk_operations" target="_blank">Views Bulk Operations (VBO)</a> (and, of course, for VBO to work, you need <a href="http://drupal.org/project/views" target="_blank">Views</a>)</li>
<li><a href="http://drupal.org/project/flag" target="_blank">Flag</a></li>
</ul>
<p>Once we have those installed, we need to configure each one to do what we need.</p>
<h3>Create a &#8220;Spam&#8221; flag</h3>
<p>The first step is to create an action we can use on the Content page to flag our content as spam (and then automatically do something with it). For this we turn to the appropriately named &#8220;Flag&#8221; module &#8212; /build/flags/add &#8212; give the flag any name you wish (eg. &#8220;kill_spam&#8221;) and then click &#8220;submit&#8221;. The following screen will give you a number of fields to fill in to define your flag. The key fields are:</p>
<ul>
<li><strong>Flag Link Text:</strong> this is the text that will be shown as the update action on our Content page. Set it to something obvious (&#8220;Flag as Spam&#8221;)</li>
<li><strong>Global flag:</strong> make sure it&#8217;s checked</li>
<li><strong>Roles that may use this flag:</strong> You&#8217;ll probably want to limit this to the administrator (or moderators)</li>
<li><strong>What nodes this flag may be used on:</strong> You can limit which content types this flag can be applied to</li>
</ul>
<div>Don&#8217;t worry much about the other fields, as they are mostly all for interface/display, which we&#8217;ll not be using as we&#8217;ll be flagging things directly from the Content list page.</div>
<h3>Create a VBO View to list all content by a certain author</h3>
<p>Things are going to start to get a bit trickier, but hold on tight and we&#8217;ll get through this together. Next up is creating a list of content we can perform batch operations to. We want to be able to select a single piece of content and from that get the user who submitted it, and all their other content. To do this we use the extremely powerful combination of Views and Views Bulk Operations (VBO).</p>
<p>Create a new View (Site Building -&gt; Views -&gt; Add), call it whatever you&#8217;d like (eg. &#8220;content_by_user&#8221;) and make sure <strong>View type</strong> is set to &#8220;node&#8221;.  The settings for the view are:</p>
<ul>
<li><strong>Style: Bulk Operations </strong>&#8211; Under the Style Options you&#8217;ll be presented with a long list of available operations. Put a check beside &#8220;<strong>Delete Node</strong>&#8220;.</li>
<li>Items to display: Unlimited</li>
<li>Add an <strong>Argument of User: Uid</strong> &#8212; This filters the results by a specific user ID. Very important, as we don&#8217;t want to bulk delete just any old content. <em>See <a title="View argument settings" href="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-02.png" rel="lightbox">this screenshot</a> for detailed settings</em>.</li>
<li><strong>Fields</strong> &#8212; strictly speaking, you do not need to add fields, as the bulk operation isn&#8217;t going to use them. However, I found it handy for testing and so added a few.</li>
<li><strong>Filter</strong> &#8212; The only filter I set was for &#8220;Published&#8221; and then set it to &#8220;no&#8221;. This was a bit of a failsafe to assure that I could only ever bulk kill unpublished nodes.</li>
</ul>
<p>That&#8217;s it, if you set everything right, it should look similar to the screenshot below. You can test and see if the right results are occurring by putting a spam user&#8217;s UID in the argument field for the preview section below the view (you&#8217;ll need to have added some fields as mentioned in the points above). It should list all the spammer&#8217;s content. If no argument is given, no content should show up. If content does show up when no argument is present, double check your settings.</p>
<div id="attachment_786" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-01.png" rel="lightbox"><img class=" wp-image-786 " title="What your View should look like" src="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-01.png" alt="" width="600" /></a><p class="wp-caption-text">What your View should look like</p></div>
<h3>Creating the Rule &amp; putting it all together</h3>
<p>The final step is to create an action (or rule) that triggers when the content is flagged. We do this with the (again, appropriately named) Rules module &#8212; /admin/rules/trigger/add.</p>
<p>Give it a label, any label, and then select <em>A node has been flagged, under &#8220;Spam Flag&#8221;</em> for the event. The next screen will allow you to choose conditions (IF) and actions (DO).</p>
<p><strong>Conditions</strong><br />
We only need one condition, and if that is optional.</p>
<ul>
<li><strong>Content is Published: NOT</strong>. You need to check the &#8220;Negate&#8221; checkbox to get the NOT part. This is another failsafe so that the action will never get triggered unless the content you&#8217;re flagging is unpublished. It&#8217;s not strictly necessary, and may not be applicable in all cases (ie. if your spam content could potentially be published when moderating it).</li>
</ul>
<p><strong>Actions</strong><br />
We will add four actions: <em>Load the flagged content author</em>, <em>Use user object to execute a VBO programmatically</em>, <em>Report to StopForumSpam.com</em>, <em>Delete user</em>.</p>
<ol>
<li><strong>Load the flagged content author</strong>: From the select box choose <em>Content-&gt;Load the content author</em>. This is where we get the author (ie. spammer) UID to pass to our VBO View we created above. The &#8220;Content&#8221; select box under &#8220;Argument configuration&#8221; should have &#8220;flagged content&#8221; selected.</li>
<li><strong>Use user object to execute a VBO programmatically</strong>: This action deletes all content by our spammer based on the Bulk Operations view we created above. The key part of this step is supplying the View with the user UID of our spammer. On the edit screen, use the following options (<a href="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-04.png" rel="lightbox" title="Use user object to execute a VBO programmatically settings">screen capture</a>):
<ul>
<li><strong>Object:</strong> We choose &#8220;flagged content author&#8221;.</li>
<li><strong>View:</strong> We select the view we created earlier, in my case it&#8217;s called <em>content_by_user</em>.</li>
<li><strong>Operation:</strong> Assuming you followed the directions above, you should only have one option here, <em>Delete Node</em>.</li>
<li><strong>View Arguments:</strong> This is where we pass the UID argument to the view. Simply input the following into the box: <strong>return array($object-&gt;uid);</strong></li>
</ul>
</li>
<li><strong>Report to StopForumSpam.com:</strong> This is an optional action that will report the spammer to <a href="http://www.stopforumspam.com" target="_blank">StopForumSpam.com</a> and hopefully help prevent the spammer from spamming your site or mine in the future. For this step you&#8217;re going to need a <a href="http://www.stopforumspam.com/signup" target="_blank">free API key from StopForumSpam.com</a>. To create it we create a new action of the type &#8220;Execute custom PHP code&#8221;. Give the action a label (eg. &#8220;Report to StopForumSpam.com&#8221;) and put the following PHP in the <em>PHP Code</em> area. <strong>NOTE: You should not include the <strong>&lt;?php</strong> or <strong>?&gt;</strong> delimiters</strong>:<br />
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.daobydesign.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.daobydesign.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.daobydesign.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.daobydesign.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">&lt;?php</span>
<span class="re0">$hostnames</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Retrieve IPs from any sessions which may still exist</span>
<span class="re0">$result</span> <span class="sy0">=</span> db_query<span class="br0">&#40;</span><span class="st0">&quot;SELECT DISTINCT hostname FROM {sessions} WHERE uid = <span class="es6">%d</span>&quot;</span><span class="sy0">,</span> <span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$object</span> <span class="sy0">=</span> db_fetch_object<span class="br0">&#40;</span><span class="re0">$result</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="re0">$hostnames</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$object</span><span class="sy0">-&gt;</span><span class="me1">hostname</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// Retrieve IPs from comments</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>module_exists<span class="br0">&#40;</span><span class="st_h">'comment'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="re0">$result</span> <span class="sy0">=</span> db_query<span class="br0">&#40;</span><span class="st0">&quot;SELECT DISTINCT hostname FROM {comments} WHERE uid = <span class="es6">%d</span>&quot;</span><span class="sy0">,</span> <span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$object</span> <span class="sy0">=</span> db_fetch_object<span class="br0">&#40;</span><span class="re0">$result</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re0">$hostnames</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$object</span><span class="sy0">-&gt;</span><span class="me1">hostname</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// Retrieve IPs from statistics</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>module_exists<span class="br0">&#40;</span><span class="st_h">'statistics'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="re0">$result</span> <span class="sy0">=</span> db_query<span class="br0">&#40;</span><span class="st0">&quot;SELECT DISTINCT hostname FROM {accesslog} WHERE uid = <span class="es6">%d</span>&quot;</span><span class="sy0">,</span> <span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$object</span> <span class="sy0">=</span> db_fetch_object<span class="br0">&#40;</span><span class="re0">$result</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re0">$hostnames</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$object</span><span class="sy0">-&gt;</span><span class="me1">hostname</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// Retrieve IPs from user stats</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>module_exists<span class="br0">&#40;</span><span class="st_h">'user_stats'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="re0">$result</span> <span class="sy0">=</span> db_query<span class="br0">&#40;</span><span class="st0">&quot;SELECT DISTINCT ip_address FROM {user_stats_ips} WHERE uid = <span class="es6">%d</span>&quot;</span><span class="sy0">,</span> <span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$object</span> <span class="sy0">=</span> db_fetch_object<span class="br0">&#40;</span><span class="re0">$result</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re0">$hostnames</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$object</span><span class="sy0">-&gt;</span><span class="me1">ip_address</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re0">$hostnames</span> <span class="sy0">=</span> <a href="http://www.php.net/array_unique"><span class="kw3">array_unique</span></a><span class="br0">&#40;</span><span class="re0">$hostnames</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// We now submit a report for each IP address found attached to the spam user.</span>
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$hostnames</span> <span class="kw1">as</span> <span class="re0">$ip</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="re0">$sfs_api_key</span> <span class="sy0">=</span> <span class="st_h">'INSERT STOPFORUMSPAM.COM API KEY HERE'</span><span class="sy0">;</span>
  <span class="re0">$url</span> <span class="sy0">=</span> <span class="st_h">'http://www.stopforumspam.com/add.php?username='</span><span class="sy0">.</span><span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">.</span><span class="st_h">'&amp;ip_addr='</span><span class="sy0">.</span><span class="re0">$ip</span><span class="sy0">.</span><span class="st_h">'&amp;email='</span><span class="sy0">.</span><span class="re0">$author</span><span class="sy0">-&gt;</span><span class="me1">mail</span><span class="sy0">.</span><span class="st_h">'&amp;api_key='</span><span class="sy0">.</span><span class="re0">$sfs_api_key</span><span class="sy0">;</span>
  <span class="re0">$sfsresult</span> <span class="sy0">=</span> drupal_http_request<span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$sfsresult</span><span class="sy0">-&gt;</span><span class="me1">code</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$sfsresult</span><span class="sy0">-&gt;</span><span class="me1">code</span> <span class="sy0">==</span> 200 <span class="sy0">&amp;&amp;</span> <a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$sfsresult</span><span class="sy0">-&gt;</span><span class="me1">error</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$sfsresult</span><span class="sy0">-&gt;</span><span class="me1">data</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re0">$sfsdata</span> <span class="sy0">=</span> <a href="http://www.php.net/unserialize"><span class="kw3">unserialize</span></a><span class="br0">&#40;</span><span class="re0">$sfsresult</span><span class="sy0">-&gt;</span><span class="me1">data</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$sfsdata</span><span class="br0">&#91;</span><span class="st_h">'success'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">return</span> <span class="kw4">TRUE</span><span class="sy0">;</span>
    <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
     watchdog<span class="br0">&#40;</span><span class="st_h">'spamcleaner'</span><span class="sy0">,</span> t<span class="br0">&#40;</span><span class="st_h">'Request unsuccessful: @url !dump'</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'@url'</span> <span class="sy0">=&gt;</span> <span class="re0">$url</span><span class="sy0">,</span> <span class="st_h">'!dump'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;&lt;pre&gt;<span class="es1">\n</span>&quot;</span> <span class="sy0">.</span> <a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$sfsdata</span><span class="sy0">,</span> <span class="kw4">TRUE</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;&lt;/pre&gt;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
  <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
    watchdog<span class="br0">&#40;</span><span class="st_h">'spamcleaner'</span><span class="sy0">,</span> t<span class="br0">&#40;</span><span class="st_h">'Error contacting service: @url !dump'</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">'@url'</span> <span class="sy0">=&gt;</span> <span class="re0">$url</span><span class="sy0">,</span> <span class="st_h">'!dump'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;&lt;pre&gt;<span class="es1">\n</span>&quot;</span> <span class="sy0">.</span> <a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$sfsresult</span><span class="sy0">,</span> <span class="kw4">TRUE</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;&lt;/pre&gt;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="sy1">?&gt;</span></pre></div></div></p>
<p>Much credit for this code is owed to <a href="http://drupal.org/project/spambot" target="_blank">Spambot</a>, as a good chunk of it was lifted directly from that module. The code hunts down various IPs that the user used to access the site, including Sessions, Comments, Statistics (if enabled) and User Stats (if enabled &#8212; the <a href="http://drupal.org/project/user_stats" target="_blank">User Stats module</a> is required).</li>
<li><strong>Delete user:</strong> The final action simply kills the spammer user account. Make sure the <em>User</em> setting is set to <strong>Flagged content author</strong>.</li>
</ol>
<p>Your Rule should now look something like the following:</p>
<div id="attachment_795" class="wp-caption aligncenter" style="width: 570px"><a href="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-04.png" title="Spam Cleanup Rule" rel="lightbox"><img src="http://www.daobydesign.com/wp-content/uploads/2012/02/drup-manual-spam-04.png" alt="" title="Spam Cleanup Rule" width="560" height="490" class="size-full wp-image-795" /></a><p class="wp-caption-text">Spam Cleanup Rule</p></div>
<h3>Wrap Up</h3>
<p>If you made it this far, give yourself a pat on the back &#8212; that wasn&#8217;t for the feint of heart. You should now be able to head over to your Content list, select the spam content items and choose your flag from the &#8220;Update options&#8221; list. As soon as you hit update, your system should trigger the rule, which will delete the spam content items, report the spammer and delete the spam user&#8217;s account.</p>
<div class="notice" id="disclaimer">
<h3 style="margin-top:0;">Disclaimer + Warning</h3>
<p>Please be aware that while I&#8217;ve tried to be thorough in the above information, and everything is working fine on my own site, you should not attempt any of the above if you&#8217;re not confident working with Drupal or some of the above is clear and logical to you. This how-to is written for advanced Drupal users in mind, there is a very real potential to delete content and users unintentionally if the above is implemented incorrectly. And remember, backup, backup, <strong>backup</strong>. Oh, and don&#8217;t forget to backup.
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/tips/drupal/quickly-killing-manually-submitted-spam-with-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ToTop Link 1.2 &amp; 1.3 for WordPress</title>
		<link>http://www.daobydesign.com/blog/tips/wordpress/totop-link-1-2-for-wordpress/</link>
		<comments>http://www.daobydesign.com/blog/tips/wordpress/totop-link-1-2-for-wordpress/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 08:41:15 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[free plugins]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[totop link]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=765</guid>
		<description><![CDATA[<p><img class="alignright size-full wp-image-687 noborder quimby_search_image" title="ToTop Link" src="http://www.daobydesign.com/wp-content/uploads/2011/11/totop-box-wht.jpg" alt="" width="200"/><a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">ToTop Link</a> 1.2 for WordPress is out.</p>
<p>This simple plugin gives WordPress-powered sites an easy way to add a &#8220;return to top&#8221; link to their pages. You can see it in action here, simply scroll down the page a bit and you&#8217;ll see a &#8220;return to top&#8221; link appear.</p>
<p><strong>New in v1.2</strong>: You can now completely customize the positioning of the link/graphic. All the pre-sets (top-left, bottom-right, etc.) are still there, but now you can also define your own &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-687 noborder quimby_search_image" title="ToTop Link" src="http://www.daobydesign.com/wp-content/uploads/2011/11/totop-box-wht.jpg" alt="" width="200"><a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">ToTop Link</a> 1.2 for WordPress is out.</p>
<p>This simple plugin gives WordPress-powered sites an easy way to add a &#8220;return to top&#8221; link to their pages. You can see it in action here, simply scroll down the page a bit and you&#8217;ll see a &#8220;return to top&#8221; link appear.</p>
<p><strong>New in v1.2</strong>: You can now completely customize the positioning of the link/graphic. All the pre-sets (top-left, bottom-right, etc.) are still there, but now you can also define your own offset values. Additionally, you can now customize the ToTop Link image to be whatever image you&#8217;d like.</p>
<p>Check out the <a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">plugin&#8217;s page</a>, or on <a href="http://wordpress.org/extend/plugins/totop-link/">WordPress.org&#8217;s plugin page</a>.</p>
<h3>EDIT: Version 1.3 Replaces Version 1.2</h3>
<p>I jumped the gun a bit with yesterday&#8217;s release of ToTop Link 1.2. One of the new features was using getimagesize(), a PHP function that on some systems will return an error. I&#8217;ve reworked the plugin to avoid this issue, and have also sexed up the admin interface a little bit. You can upgrade to v1.3 via your site&#8217;s admin interface, or just go directly to the <a href="http://wordpress.org/extend/plugins/totop-link/">WordPress page and download it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/tips/wordpress/totop-link-1-2-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEOSimple now for Joomla 2.5</title>
		<link>http://www.daobydesign.com/blog/development-news/seosimple-now-for-joomla-2-5/</link>
		<comments>http://www.daobydesign.com/blog/development-news/seosimple-now-for-joomla-2-5/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 08:46:21 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[joomla 1.6]]></category>
		<category><![CDATA[joomla 1.7]]></category>
		<category><![CDATA[joomla 2.5]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[seosimple]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=759</guid>
		<description><![CDATA[<p><img class="right-nb" src="http://www.daobydesign.com/wp-content/uploads/2008/04/seo-simple-box-white.jpg" alt="SEOSimple Box" width="200" align="right" />Just a quick update to say SEOSimple 2.1 has been released, and now has a Joomla 2.5 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_25.png" /> version.</p>
<p>I&#8217;ve also added an option that allows you to define whether you wish your category description to be used as the category page&#8217;s meta description. Optionally, you can use the content of the top-most article in the category listing. If set to &#8220;category description&#8221;, and no category description is available, it will default to the top-most article&#8217;s content (which was what occurred &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><img class="right-nb" src="http://www.daobydesign.com/wp-content/uploads/2008/04/seo-simple-box-white.jpg" alt="SEOSimple Box" width="200" align="right" />Just a quick update to say SEOSimple 2.1 has been released, and now has a Joomla 2.5 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_25.png" /> version.</p>
<p>I&#8217;ve also added an option that allows you to define whether you wish your category description to be used as the category page&#8217;s meta description. Optionally, you can use the content of the top-most article in the category listing. If set to &#8220;category description&#8221;, and no category description is available, it will default to the top-most article&#8217;s content (which was what occurred in SEOSimple 2.0). This is actually a re-addition, as this behavior was (and still is) standard in the original Joomla 1.5 version of the plugin. As such, if you&#8217;re still using Joomla 1.5, there&#8217;s no update for you, as no new features were added.</p>
<p>You can go here and <a href="http://joomlacode.org/gf/project/seosimple/frs/">download the plugin directly</a>, or visit the official <a href="http://www.daobydesign.com/free-plugins/seosimple-joomla-plugin/" title="Joomla 1.5, 1.6, 1.7, 2.5 SEO plugin">SEOSimple homepage</a> for more details and instructions. And please report any problems you have either on the <a href="http://joomlacode.org/gf/project/seosimple/forum/">SEO Simple Support Forum</a>, or in the <a href="http://www.daobydesign.com/free-plugins/seosimple-joomla-plugin/#comments">comments on the SEOSimple home page</a> (preferably the support forum).</p>
<p>And please, if you use SEOSimple and find it useful, <a href="http://extensions.joomla.org/extensions/site-management/seo-a-metadata/4102">vote for the plugin at the Joomla Extensions site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/seosimple-now-for-joomla-2-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New WP Plugin: ToTop Link</title>
		<link>http://www.daobydesign.com/blog/development-news/new-wp-plugin-totop-link/</link>
		<comments>http://www.daobydesign.com/blog/development-news/new-wp-plugin-totop-link/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 02:38:03 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[free plugins]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=746</guid>
		<description><![CDATA[<p><img class="alignright size-full wp-image-687 noborder quimby_search_image" title="ToTop Link" src="http://www.daobydesign.com/wp-content/uploads/2011/11/totop-box-wht.jpg" alt="" width="200"/>I&#8217;m pleased to announce the release of our latest WordPress plugin, <a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">ToTop Link</a>.</p>
<p>This simple plugin gives WordPress-powered sites an easy way to add a &#8220;return to top&#8221; link to their pages. Rather than explain how it works, simply scroll down the page here and you&#8217;ll see the link image appear in the top right corner.</p>
<p>Settings allow you easily to adjust the positioning and style to best fit your site. As always, it&#8217;s the first version, so all &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-687 noborder quimby_search_image" title="ToTop Link" src="http://www.daobydesign.com/wp-content/uploads/2011/11/totop-box-wht.jpg" alt="" width="200">I&#8217;m pleased to announce the release of our latest WordPress plugin, <a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">ToTop Link</a>.</p>
<p>This simple plugin gives WordPress-powered sites an easy way to add a &#8220;return to top&#8221; link to their pages. Rather than explain how it works, simply scroll down the page here and you&#8217;ll see the link image appear in the top right corner.</p>
<p>Settings allow you easily to adjust the positioning and style to best fit your site. As always, it&#8217;s the first version, so all bug reports and feature suggestions are warmly welcomed.</p>
<p>Check out the <a href="http://www.daobydesign.com/free-plugins/totop-link-for-wordpress/">plugin&#8217;s page</a>, or on <a href="http://wordpress.org/extend/plugins/totop-link/">WordPress.org&#8217;s plugin page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/new-wp-plugin-totop-link/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal and WordPress founders interviewed together</title>
		<link>http://www.daobydesign.com/blog/development-news/drupal-and-wordpress-founders-interviewed-together/</link>
		<comments>http://www.daobydesign.com/blog/development-news/drupal-and-wordpress-founders-interviewed-together/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 12:49:22 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[dries buytaert]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[matt mullenweg]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=736</guid>
		<description><![CDATA[<p>A bit of a <a href="http://wordpress.tv/2011/10/16/drupal-wp/">landmark co-interview</a> with opensource CMS luminaries <a href="http://ma.tt">Matt Mullenweg</a> (founder of WordPress) and <a href="http://buytaert.net/">Dries Buytaert</a> (founder of Drupal) at SchipulCon 2011 in Houston, Texas. Bear with the initial audio &#8212; the irony of tech stuff going wrong is not lost on me either.</p>

<p>Here at Dao By Design we near exclusively build using one or the other, and I couldn&#8217;t agree with Matt&#8217;s comment that initially Drupal was a very powerful and complicated CMS that has become &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>A bit of a <a href="http://wordpress.tv/2011/10/16/drupal-wp/">landmark co-interview</a> with opensource CMS luminaries <a href="http://ma.tt">Matt Mullenweg</a> (founder of WordPress) and <a href="http://buytaert.net/">Dries Buytaert</a> (founder of Drupal) at SchipulCon 2011 in Houston, Texas. Bear with the initial audio &#8212; the irony of tech stuff going wrong is not lost on me either.</p>
<div class="aligncenter" style="width:400px;"><embed type="application/x-shockwave-flash" src="http://s0.videopress.com/player.swf?v=1.03" width="400" height="220" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true" flashvars="guid=Hsu9Z4w3&amp;isDynamicSeeking=true"></embed></div>
<p>Here at Dao By Design we near exclusively build using one or the other, and I couldn&#8217;t agree with Matt&#8217;s comment that initially Drupal was a very powerful and complicated CMS that has become easier to use, and WordPress was a simple platform that has become much more powerful. Some things are still easier on one or the other (WordPress still leads with backend UI/UX; whereas Drupal has better i18n support and much better handling of custom content types).</p>
<p>Squabbles aside, I agree with Matt that either CMS could handle the scope of virtually any project.</p>
<p>Also check out Dries most recent blog post, &#8220;<a href="http://buytaert.net/sitecore-fud">Sitecore FUD</a>&#8220;, a fantastic taking apart of a proprietary software vendor&#8217;s <strike>slagging</strike> review of opensource CMS projects (specifically WordPress and Drupal).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/drupal-and-wordpress-founders-interviewed-together/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Best reason not to outsource your SEO work to the lowest bidder</title>
		<link>http://www.daobydesign.com/blog/opinion/best-reason-not-to-outsource-your-seo-work-to-the-lowest-bidder/</link>
		<comments>http://www.daobydesign.com/blog/opinion/best-reason-not-to-outsource-your-seo-work-to-the-lowest-bidder/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 05:52:26 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[black hat]]></category>
		<category><![CDATA[PageRank]]></category>
		<category><![CDATA[pr]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=712</guid>
		<description><![CDATA[<p><a href="http://www.flickr.com/photos/63056612@N00/155554663/"><img class="alignright size-medium wp-image-716" title="By freezelight on Flickr" src="http://www.daobydesign.com/wp-content/uploads/2011/10/155554663_89beb0ac63-300x224.jpg" alt="" width="300" height="224" /></a>In addition to running a Web design and development business, I also run numerous &#8220;side project/hobby&#8221; sites and blogs that appeal to various interests of mine. Without exception they all suffer from copious amounts of spam &#8212; and some of it might be coming from you without your knowledge.</p>
<p>This spam is virtually all &#8220;link building&#8221; spam. This means that &#8212; unlike e-mail spam &#8212; the intention of the spammer is not to get you to visit the site or &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/63056612@N00/155554663/"><img class="alignright size-medium wp-image-716" title="By freezelight on Flickr" src="http://www.daobydesign.com/wp-content/uploads/2011/10/155554663_89beb0ac63-300x224.jpg" alt="" width="300" height="224" /></a>In addition to running a Web design and development business, I also run numerous &#8220;side project/hobby&#8221; sites and blogs that appeal to various interests of mine. Without exception they all suffer from copious amounts of spam &#8212; and some of it might be coming from you without your knowledge.</p>
<p>This spam is virtually all &#8220;link building&#8221; spam. This means that &#8212; unlike e-mail spam &#8212; the intention of the spammer is not to get you to visit the site or product they&#8217;re linking to, but rather they are building a massive collection of links back to the source. The reason for this is because search engines use the number and quality of links back to your site to help determine your site&#8217;s authority (or PageRank). In a perfect world, such links would all be genuine &#8220;votes&#8221; for your site from other Web sites, in our world it results in paid linking schemes, and this sort of spam.</p>
<p>I realize the Internet both fosters and requires a healthy level of cynicism in its usership, but I try my best to maintain the view that most people are good people. I believe that the vast majority of Web sites that are spamming my sites are not actually the culprits directly responsible. I would guess that in well over 50% of cases, they have paid a firm to handle the rather nebulous &#8220;SEO&#8221; work. Frequently this is just the guy that designed their Web site, who then heads over to an outsourcing resource and offshores the work to cheaper labour in India, Eastern Europe or Asia.</p>
<p>It is then this sub-contractor that employs questionable tactics in an attempt to boost the site&#8217;s SEO value. The problem, aside from being an incredible time-suck in <em>my</em> day, is that not only does it have a very low return value, it runs the very real risk of doing far more damage to the site than no link building at all.</p>
<h3>A lack of benefits paired with dangerous consequences</h3>
<p>First, most spam messages land in spam traps and never see the light of day. Of the millions of spam comments, profiles and various other submissions I&#8217;ve received on my sites, very very few ever actually make it to the &#8220;live&#8221; indexed site. Most are simply auto-moderated and deleted. This blog, for example, gets approximately 1,000-2,000 spam comments per week, and I never even see most of them.</p>
<p>Those that do get through are often tagged with a &#8220;nofollow&#8221; attribute that tells search engines that it is valueless and shouldn&#8217;t be used as a &#8220;vote&#8221; for the link&#8217;s authority.</p>
<p>But worst of all for the offending site are people like me &#8212; people who go out of their way to report spam Web sites to blacklist Web sites and the search engines themselves (see <a href="#resources">resources</a> below). This has the potential of not just lowering the spam site&#8217;s ranking in search engines, but having it removed completely. And should the offending site get on a <a href="http://whatismyipaddress.com/dnsbl-blacklist">Domain Name System Blacklist (DNSbl)</a>, it could hurt the site&#8217;s ability to have their e-mail received by customers and clients.</p>
<p>To me, that&#8217;s a lot of risk to take in hopes of getting your site well-positioned on Google. It&#8217;s a risk a lot of spam/affiliate sites are obviously willing to take, as they&#8217;re not &#8220;real&#8221; businesses and so can quickly be shut down and pop up again under a different name/domain. However, for genuine businesses engaging in similar reckless behavior (with their knowledge or not), could find themselves with a useless domain, no search engine ranking, and a need to find a new IP or hosting provider; never mind that it also flushes their reputation down the toilet.</p>
<h3>Punish the site, not the spammer</h3>
<p>Most spam catching does so through the use of IP addresses and the e-mail address of the spammer. Unfortunately these are very quickly switched and regenerated for a new batch of spamming, and thus mostly useless as an effective way of stopping spam.</p>
<p>This is why I think the best way we can prevent spam, at least from legitimate businesses, is by punishing the legitimate business. Actively trying to get a legitimate business that is ignorant of the blackhat actions of their SEO &#8220;expert&#8221; might sound harsh, but it is the most effective way of assuring better consumer education, which in turn will encourage SEO firms to develop better practices or risk losing newly-informed clients to more ethical firms.</p>
<p>If you run a Web site that gets spammed, I hope you&#8217;ll join me in taking a hard line against this sort of spam. It&#8217;s easy to just flush it and forget about it, but a little bit of reporting can go a long way to reminding companies hiring spammers that ignorance of the method is not absolution. If you are a company looking to increase your search ranking and considering hiring an SEO firm? Please educate yourself on at least the basic do&#8217;s and don&#8217;ts. Here is some advice from <a href="http://www.freemarketingzone.com/search-engine-optimization/choosing-seo-firm.html">Free Marketing Zone</a>:</p>
<blockquote><h4>Researching Before Hiring an SEO Firm</h4>
<p>Find out a little bit more about the company and its clients. If they publish a list of the clients they have worked with, contact those clients and ask about the SEO firm. You can go to search engines and see if their clients rank highly by selected keywords or keyphrases.</p>
<p>If a company doesn’t provide a client list, you can ask in forums and message boards about an SEO firm. Maybe some clients will show up and advise you about the firm.</p>
<p>Another way to check if a firm is worthy is to see who links to them. Go to Google and Bing and type in:</p>
<p><em>link:www.seofirmname.com</em></p>
<p>Look at 20 pages at least. If you see that links are from blog comments, link farms, <abbr title="Free For All pages - basically link farms with content">FFA pages</abbr>, or there are hundreds of links from non-related Web sites linking to them, then there&#8217;s a red flag. Various related pages or client sites linking back are a good sign.</p></blockquote>
<h3 id="resources">Some Resources</h3>
<ul>
<li>Google&#8217;s Webmaster Tools has a recently <a href="https://www.google.com/webmasters/tools/spamreport?hl=en">revamped reporting page for Webspam</a>. You will need to have a Google Webmaster account, which if you own a Web site you should have anyway.</li>
<li>Bing.com also offers a <a href="https://support.discoverbing.com/eform.aspx?productKey=bingcontentremoval&amp;ct=eformts&amp;st=1&amp;wfxredirect=1">similar reporting feature</a> for spam or malicious content found in their search results.</li>
<li>And <a href="http://help.yahoo.com/l/us/yahoo/search/siteexplorer/siteexplorer-56.html">Yahoo as well</a>.</li>
<li>Here is a great list of <a href="http://spamlinks.net/track-report-addresses.htm">links to various reporting and spam tracking sites</a>.</li>
<li>If you&#8217;re concerned your domain/IP might have been blacklisted, you can check it at <a href="http://www.blacklistalert.org/">BlacklistAlert.org</a>.</li>
<li>Kaiser the Sage has some <a href="http://kaiserthesage.com/buy-paid-links/">creative and ethical ways in which you can purchase links</a> and build your site&#8217;s traffic without running the risk of blacklists.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/opinion/best-reason-not-to-outsource-your-seo-work-to-the-lowest-bidder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEOSimple Joomla plugin &#8211; now for J1.5 J1.6 and J1.7!</title>
		<link>http://www.daobydesign.com/blog/development-news/seosimple-joomla-plugin-now-for-j1-5-j1-6-and-j1-7/</link>
		<comments>http://www.daobydesign.com/blog/development-news/seosimple-joomla-plugin-now-for-j1-5-j1-6-and-j1-7/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 14:35:17 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[development news]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[joomla 1.5]]></category>
		<category><![CDATA[joomla 1.6]]></category>
		<category><![CDATA[joomla 1.7]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[seosimple]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=706</guid>
		<description><![CDATA[<p><img class="right-nb" src="http://www.daobydesign.com/wp-content/uploads/2008/04/seo-simple-box-white.jpg" alt="SEOSimple Box" width="200" align="right" />After almost exactly two years of no updates, I&#8217;m quite happy to announce the release of SEOSimple 2.0 &#8212; now compatible with Joomla 1.6 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_16_native.png" /> and Joomla 1.7 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_17.png" /> as well as Joomla 1.5 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_15_native.png" />.</p>
<p>That&#8217;s not all &#8212; I&#8217;ve finally fixed a number of small bugs that have been growing dust on my todo list &#8211; including fixing the K2 compatibility issue and the occurrence of an &#8220;uninitialized strong offset&#8221; error.</p>
<p>I&#8217;ve also added a couple new features, namely an <strong>expanded </strong>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><img class="right-nb" src="http://www.daobydesign.com/wp-content/uploads/2008/04/seo-simple-box-white.jpg" alt="SEOSimple Box" width="200" align="right" />After almost exactly two years of no updates, I&#8217;m quite happy to announce the release of SEOSimple 2.0 &#8212; now compatible with Joomla 1.6 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_16_native.png" /> and Joomla 1.7 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_17.png" /> as well as Joomla 1.5 <img src="http://www.daobydesign.com/wp-content/uploads/2008/04/compat_15_native.png" />.</p>
<p>That&#8217;s not all &#8212; I&#8217;ve finally fixed a number of small bugs that have been growing dust on my todo list &#8211; including fixing the K2 compatibility issue and the occurrence of an &#8220;uninitialized strong offset&#8221; error.</p>
<p>I&#8217;ve also added a couple new features, namely an <strong>expanded number of options for Front Page titles</strong>, including not modifying it at all (while still modifying regular pages); and a <strong>NOINDEX on Category Pages</strong> feature that when enabled modifies the ROBOTS meta tag on all category pages to be &#8220;noindex, follow&#8221;. &#8220;NOINDEX, FOLLOW&#8221; means that search engines wont index the page and potentially penalize your site for duplicate content, but it tells the search engine to still follow the links on the page (to regular articles) and index those. This feature is still very much a &#8220;beta&#8221; feature, so please test it out and report back any bugs.</p>
<p>You can go here and <a href="http://joomlacode.org/gf/project/seosimple/frs/">download the plugin directly</a>, or visit the official <a href="http://www.daobydesign.com/free-plugins/seosimple-joomla-plugin/" title="Joomla 1.5, 1.6, 1.7 SEO plugin">SEOSimple homepage</a> for more details and instructions. And please report any problems you have either on the <a href="http://joomlacode.org/gf/project/seosimple/forum/">SEO Simple Support Forum</a>, or in the <a href="http://www.daobydesign.com/free-plugins/seosimple-joomla-plugin/#comments">comments on the SEOSimple home page</a> (preferably the support forum, as the # of comments is a bit insane).</p>
<p>Oh! And remember to <a href="http://extensions.joomla.org/extensions/site-management/seo-a-metadata/4102">vote for the plugin at the Joomla Extensions site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/seosimple-joomla-plugin-now-for-j1-5-j1-6-and-j1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding a little honey to WordPress&#8217; Contact Form 7 Plugin</title>
		<link>http://www.daobydesign.com/blog/development-news/adding-a-little-honey-to-wordpress-contact-form-7-plugin/</link>
		<comments>http://www.daobydesign.com/blog/development-news/adding-a-little-honey-to-wordpress-contact-form-7-plugin/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 03:58:35 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[antispam]]></category>
		<category><![CDATA[contact forms]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[wordpress plugins]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=695</guid>
		<description><![CDATA[<p><img class="alignright size-full wp-image-687 noborder" title="Contact Form 7 Honeypot Module" src="http://www.daobydesign.com/wp-content/uploads/2011/06/cf7-honeypot-box-wht.jpg" alt="" width="200"/></p>
<p>I&#8217;ve just released a new WordPress plugin that adds <a href="http://en.wikipedia.org/wiki/Honeypot_(computing)">honeypot</a> functionality to the popular (and frankly, awesome) <a href="http://wordpress.org/extend/plugins/contact-form-7/">Contact Form 7 plugin</a> for WordPress.</p>
<p>Built out of self-necessity, the <a href="http://www.daobydesign.com/free-plugins/honeypot-module-for-contact-form-7-wordpress-plugin/">Contact Form 7 Honeypot plugin</a> simply gives CF7 users an additional &#8220;honeypot&#8221; element to use when building their forms. A honeypot, for those unaware, is a spam trap that attempts to prevent spam bots from clogging up forms with their junk.</p>
<p>This is a non-intrusive method of spam stopping that, in contrast &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-687 noborder" title="Contact Form 7 Honeypot Module" src="http://www.daobydesign.com/wp-content/uploads/2011/06/cf7-honeypot-box-wht.jpg" alt="" width="200"></p>
<p>I&#8217;ve just released a new WordPress plugin that adds <a href="http://en.wikipedia.org/wiki/Honeypot_(computing)">honeypot</a> functionality to the popular (and frankly, awesome) <a href="http://wordpress.org/extend/plugins/contact-form-7/">Contact Form 7 plugin</a> for WordPress.</p>
<p>Built out of self-necessity, the <a href="http://www.daobydesign.com/free-plugins/honeypot-module-for-contact-form-7-wordpress-plugin/">Contact Form 7 Honeypot plugin</a> simply gives CF7 users an additional &#8220;honeypot&#8221; element to use when building their forms. A honeypot, for those unaware, is a spam trap that attempts to prevent spam bots from clogging up forms with their junk.</p>
<p>This is a non-intrusive method of spam stopping that, in contrast to ugly captchas, works behind the scenes to provide similar challenges for bot-submitted spam. Don&#8217;t get us wrong, CAPTCHA technology is cool and we use it as well. However, sometimes you just don&#8217;t want to muddy up your form with a chunk of ugly/squiggly intentionally hard-to-read text.</p>
<p>All feedback on the plugin is greatly appreciated. Please <a href="http://www.daobydesign.com/free-plugins/honeypot-module-for-contact-form-7-wordpress-plugin/#respond">leave your comments here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/adding-a-little-honey-to-wordpress-contact-form-7-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dao By Design Launches China Blog Network</title>
		<link>http://www.daobydesign.com/blog/development-news/dao-by-design-launches-china-blog-network/</link>
		<comments>http://www.daobydesign.com/blog/development-news/dao-by-design-launches-china-blog-network/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 11:28:20 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Development News]]></category>
		<category><![CDATA[china blog network]]></category>
		<category><![CDATA[dao media group]]></category>
		<category><![CDATA[press release]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=665</guid>
		<description><![CDATA[<p><a href="http://www.chinablognetwork.com"><img src="http://www.daobydesign.com/wp-content/uploads/2010/12/cbn01.jpg" alt="" title="Connecting sites about China - China Blog Network" width="300" height="188" class="alignright size-full wp-image-666" /></a>In early 2008 Dao By Design added a feature to its China-expat focused community site &#8212; <a title="No-nonsense China Expat &#038; Travel Community - Lost Laowai" href="http://www.lostlaowai.com">Lost Laowai</a> &#8212; which allowed bloggers focused on China to connect with one another. In the time since the feature has become increasingly popular and outgrew its position as a periphery feature on another site. So, we did the only thing we could: redesigned it, repackaged it, and relaunched it on its own domain.</p>
<p>As such, we&#8217;re extremely proud to present the <a title="Connecting sites about China" href="http://www.chinablognetwork.com">China Blog </a>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.chinablognetwork.com"><img src="http://www.daobydesign.com/wp-content/uploads/2010/12/cbn01.jpg" alt="" title="Connecting sites about China - China Blog Network" width="300" height="188" class="alignright size-full wp-image-666" /></a>In early 2008 Dao By Design added a feature to its China-expat focused community site &#8212; <a title="No-nonsense China Expat &#038; Travel Community - Lost Laowai" href="http://www.lostlaowai.com">Lost Laowai</a> &#8212; which allowed bloggers focused on China to connect with one another. In the time since the feature has become increasingly popular and outgrew its position as a periphery feature on another site. So, we did the only thing we could: redesigned it, repackaged it, and relaunched it on its own domain.</p>
<p>As such, we&#8217;re extremely proud to present the <a title="Connecting sites about China" href="http://www.chinablognetwork.com">China Blog Network</a>.</p>
<p>And of course, no overhaul would be complete without a bunch of new features to assist in facilitating the site&#8217;s primary purposes &#8212; helping China bloggers connect to one another and getting their blog discovered by a wider audience.</p>
<p>The premise of the CBN is simple, members submit their sites, and the sites are then “connected” to one another in traditional Webring fashion facilitated by the completely redesigned CBN Widget. </p>
<p>Additionally, the CBN features a categorized directory of sites about China, with each site receiving its own detailed profile page complete with a full description of the site, an auto-generated site thumbnail, placement on the CBN interactive location map, latest posts feed, a &#8220;like&#8221; button, tracking of fans of the site, and a list of similar blogs to help easily find other relevant sites </p>
<p>The China Blog Network also includes a <a href="http://www.chinablognetwork.com/forum">community-supported forum</a> where bloggers and site developers can get answers and discuss topics related to blogging, site creation and China.</p>
<p>We built the site using the powerful open-source <a href="http://www.daobydesign.com/knowledgebase/general/what-is-a-cms-and-why-do-i-need-one/">content management system</a>, <a href="http://www.drupal.org">Drupal</a>. In addition, the site includes integration with <a href="http://openlayers.org">OpenLayers</a>, a excellent dynamic and interactive mapping script, to handle <a href="http://www.chinablognetwork.com/map">on-map display of community member blogs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/development-news/dao-by-design-launches-china-blog-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NeochaEDGE featured on Australia&#8217;s ABC</title>
		<link>http://www.daobydesign.com/blog/neochaedge-featured-on-australias-abc/</link>
		<comments>http://www.daobydesign.com/blog/neochaedge-featured-on-australias-abc/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 05:23:50 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[clients]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[neocha]]></category>
		<category><![CDATA[neochaedge]]></category>

		<guid isPermaLink="false">http://www.daobydesign.com/?p=656</guid>
		<description><![CDATA[<p>Good friends and clients of Dao By Design, <a href="http://edge.neocha.com">NeochaEDGE</a>, were recently featured on the Australian Broadcasting Corporation’s <a href="http://www.abc.net.au/arts/tv_radio/art_nation/">ART NATION</a> program.</p>
<p></p>
<p>While the program doesn&#8217;t focus on the role NeochaEDGE&#8217;s Web site plays in achieving the Shanghai-based company&#8217;s goals, you can catch several glimpses of people using the site in the video above &#8212; which as far as Web sites getting featured on TV goes, is pretty cool by me.</p>
<p><a href="http://edge.neocha.com">NeochaEDGE</a> is one part creative agency that represents leading-edge Chinese &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Good friends and clients of Dao By Design, <a href="http://edge.neocha.com">NeochaEDGE</a>, were recently featured on the Australian Broadcasting Corporation’s <a href="http://www.abc.net.au/arts/tv_radio/art_nation/">ART NATION</a> program.</p>
<p><embed src="http://www.tudou.com/v/x_DHJplYfdg/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="620" height="517"></embed></p>
<p>While the program doesn&#8217;t focus on the role NeochaEDGE&#8217;s Web site plays in achieving the Shanghai-based company&#8217;s goals, you can catch several glimpses of people using the site in the video above &#8212; which as far as Web sites getting featured on TV goes, is pretty cool by me.</p>
<p><a href="http://edge.neocha.com">NeochaEDGE</a> is one part creative agency that represents leading-edge Chinese creative talent and one part web-magazine that showcases inspiring creative content from China. For anyone that&#8217;s ever said China is lacking in creativity, I urge you to check out the site &#8212; it&#8217;s absolutely bursting with amazing Chinese art and artists of all styles and mediums.</p>
<p>For details on work we&#8217;ve done with Neocha, please <a href="http://www.daobydesign.com/tag/neochaedge/">click here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daobydesign.com/blog/neochaedge-featured-on-australias-abc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: www.daobydesign.com @ 2012-05-17 18:20:02 -->
