How to deal with aggressive site crawler bots.

If you have a website that is being relentlessly attacked by bot farms. Try adding this line to the bottom of your site’s htaccess file. If you do not see the bot listed, then you can simply add on to this list.

BrowserMatchNoCase (libwww-perl|wget|LieBaoFast|Mb2345Browser|zh-CN|Kinza|Bytespider|Baiduspider|Sogou|Datanyze|AspiegelBot|adscanner|serpstatbot|spaziodat|undefined) bad_bot

How to fix the SASS CSS multiple project preprocessor issue in the Apache NetBeans IDE.

Create a custom Windows .bat file and add the following code to the file.

setlocal EnableDelayedExpansion
sass %4:%5 -s compressed

Give the file the correct permissions for your system, and reference this newly created .bat file as the Sass Executable within NetBeans. You should now be able to use the native Watch and Compiler option functionality of NetBeans without getting an error, or having to set the compiler options and watch folders within the bat file.

How to Configure Shopify Conversion Tracking

SilverStripe Report Export to CSV Error

The export columns need to be set in order for the csv generator to function properly.

Updating getReportField() in cms/code/report/Report.php like below will fix this issue


public function getReportField() {
// TODO Remove coupling with global state
$params = isset($_REQUEST[‘filters’]) ? $_REQUEST[‘filters’] : array();
$items = $this->sourceRecords($params, null, null);
$exportButton = new GridFieldExportButton(‘buttons-after-left’);

$gridFieldConfig = GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldSortableHeader(),
new GridFieldDataColumns(),
new GridFieldPaginator(),
new GridFieldButtonRow(‘after’),
new GridFieldPrintButton(‘buttons-after-left’),
$gridField = new GridField(‘Report’,false, $items, $gridFieldConfig);
$columns = $gridField->getConfig()->getComponentByType(‘GridFieldDataColumns’);
$displayFields = array();
$fieldCasting = array();
$fieldFormatting = array();

// Parse the column information
foreach($this->columns() as $source => $info) {
if(is_string($info)) $info = array(‘title’ => $info);

if(isset($info[‘formatting’])) $fieldFormatting[$source] = $info[‘formatting’];
if(isset($info[‘csvFormatting’])) $csvFieldFormatting[$source] = $info[‘csvFormatting’];
if(isset($info[‘casting’])) $fieldCasting[$source] = $info[‘casting’];

if(isset($info[‘link’]) && $info[‘link’]) {
$fieldFormatting[$source] = function($value, &$item) {
return sprintf(
Controller::join_links(singleton(‘CMSPageEditController’)->Link(‘show’), $item->ID),

$displayFields[$source] = isset($info[‘title’]) ? $info[‘title’] : $source;
return $gridField;


I Ain’t Afraid of No Ghost Referrals

If you have unrealistic traffic in your Google Analytics or you see some Referral URLs that seem a little fishy, then likely they do not belong. These websites are called Ghost Referrals and they clog up your analytics account with junk data. For a more accurate representation of your site’s realistic analytics you need to create filters in order to remove these Ghosts.

Known List of Referral Spam

Google Analytics Regular Expressions||||||||||




Additional Resources

Technical Specifications & Tasks for Creating Effective HTML Emails

  • Plan your slices and table nesting
  • Slice images and optimize for web. Photos/Textures as JPGs, Icons as transparent PNGs, flatter bitmap looking images as GIFs
  • Convert as much text as possible from PSD to HTML text. Should be greater than 85% HTML text.
  • Use inline styles instead of CSS style rules
  •  Fix the breaks from Photoshop. Small “L”‘s will appear in Dreamweaver. They need to be replaced with a space or a
    depending on how the designer intended the line to break.
  • Convert curved apostrophes and quotation marks. Do a find and replace on these. Replace with manually entered versions from the keyboard.
  • Set most td cells to vertically align to the top
  • HTML list items do not work in all email clients so they need to be done as multi-column tables.
  • On paragraphs set top, left and right margins to zero. Use only bottom margins for spacing between paragraphs. Typically paragraphs will have 15px bottom spacing and headlines will have 25px margin:0 0 15px 0 Note on margin: Top Left Bottom Right

Fix for odd horizontal blocks or image misalignment:
Tag: td
CSS: font-size:1px; line-height:0; margin:0; padding:0;
Reason: It resets the font for the cell so that the image in the cell and/or empty space( ) does not get the default font applied from web based email applications (e.g. Yahoo, Gmail,

Fix for images specifically in Yahoo
Tag: img
CSS: display:block