The Definitive Guide to Enterprise Link Building

Xight Interactive has been providing Technical SEO services for the past 5 years now, although our company is widely known for link building.

Over the years, link building remained a vital part of digital marketing and I personally didn’t see any signs of slowing down. This is very apparent when seeing most dominant companies/entities thriving in search are very active in their own link development campaigns.

The link graph is still a core component of today’s search algorithm (as revealed by Google’s Andrey Lipattsev).

The post The Definitive Guide to Enterprise Link Building appeared first on Kaiserthesage.


Getting Started with Google Optimize

A few months ago, Google announced that it would be offering a free version of Google Optimize 360 to the public. This month, people who requested an invite to Optimize will begin to receive access to the tool. If you have access, this article will help you get started. If you would like to sign up for Optimize, but have not requested an invite yet, you can do so here. Google is granting access on a first come first serve basis through early 2017.

What is Google Optimize?

Google Optimize 360 is Google’s A/B testing and personalization platform. Like most A/B testing platforms, it allows marketers to test variations of a site in order to improve conversions. Unlike most A/B testing platforms, it natively integrates with Google Analytics.

Google Optimize (free) vs Google Optimize 360

Google has a great comparison chart for what is included in each package. Here I will simply explain the limitations of the free version.

No audiences. Optimize 360 allows you to use Google Analytics audiences to target which users will be included in your experiment. The free version does not. If you are looking to make sure only relevant users see your experiment, you’ll need to use a combination of other targeting options Optimize offers.

Limited Concurrent Experiments. The number of concurrent tests you can run is capped at 3. This shouldn’t be a problem for small and medium sized sites that are just getting started with A/B testing. But larger, more experienced teams may find this to be a real handicap.

Limited multivariate testing. The free version of Optimize does offer multivariate testing, but multivariate tests are limited to 16 variations.

Pre-selected Objectives. One of the great features of Optimize 360 is the ability to see how an experiment would have impacted other GA goals by retroactively changing experiment objectives. It can do this because objectives are actually GA goals, which are pulled from the view you tied to the Optimize container.

How is Google Optimize Implemented?

Updated: As Google Optimize matures, we’ve seen shifts in recommendations for how to implement it on your site. Many options exist, but the recommended way to add Optimize to your site is by adding a line of code to the Universal Analytics snippet installed on your website. The general process for setting up Google Optimize looks like this:

  1. Create an account and container
  2. Link the container to Google Analytics
  3. Install Google Optimize on the site

We cover this and other elements of installing Google Optimize in this blog post:

Creating Your First Experiment

Creating your first experiment is very simple.

1. From the Optimize Container page, click the blue “Create Experiment” button.

2. Enter your experiment name, editor page, and the type of experiment you would like to run. The editor page is the page you will make modifications to using the visual editor. For example, if you’re running and experiment on blog pages, enter one blog entry URL. Later you will use experiment targeting to apply your changes to some or all of your blog posts.

3. Select the type of experiment you would like to run. You have three basic options here:

  • A/B Test. Tests two or more variants of a page, also called an A/B/N test. This is the most common of the experiments.
  • Multivariate Test. Tests variants with two or more different sections on the same page (or page template). This is great for when you want to try multiple combinations of elements on the same page (or page template).
  • Redirect Test. Test separate web pages identified by different URLs or paths. If you’re making large changes to page code it can slow down the page. If you find yourself in that situation, it’s better to run a redirect test. Don’t forget to add a noindex tag to the test page.

Experiment Interface

For the rest of this blog post we will focus on an A/B test. Let’s dive into the experiment interface.

There are two main tabs, “Details” and “Reporting”. Details is where you’ll be able to find and modify experiment information, Reporting is where experiment data is reported (it’s also reported in GA).

There are two main sections here: variants and configuration.

Variants Section

Variants is where you’re able to see:

  1. How many variants are in your experiment
  2. What percentage of traffic each variant will receive (an even split is recommended)
  3. Options for previewing how the experiment will look on desktop and mobile. It is also where you can generate a preview link for your team.
  4. Number of changes made to the variation.
  5. Additional options which include edit variant name and delete variant.

Configuration Section

The configuration section is where you are able to provide a description of the experiment, select experiment goals (objectives), and select targeting parameters.

Selecting Objectives is Important. Unlike Optimize 360 (the premium version) you can not retroactively change objectives to see how your experiment affected other goals. So make sure you have all of your objectives selected before you start your experiment.

Hypothesis Best Practices. If you’re just getting started with testing, you may be tempted to simply write a description of test and skip the hypothesis. This is not recommended. Writing a clear hypothesis will keep you honest when the results roll in. Follow this basic formula when generating a hypothesis: If [I do this], then [this will happen].

Targeting

The targeting section is where you will define what conditions will fire the experiment. Targeting options are evaluated on page load.

Targeting Options. Each targeting option links to the Optimize targeting docs which have much more information about how to use each of these options.

  • URLs. Target specific pages and sets of pages. URL targeting allows you to pick the web pages where your experiments run. URL targeting is useful for presenting experiment variants on a specific set of pages, easily defined by their URL. You can target a single page, a narrow subset of pages, or even Hosts and Paths.
  • Audiences (360 only). Target Audiences that you create in Google Analytics. Optimize 360 allows target your experiments to Analytics Audiences. This allows you to focus your experiment on a group of users who have exhibited specific behaviors on your site.
  • Behavior. Target users arriving to your site from a specific channel or source. Behavior targeting allows you to target first time users and visitors coming from a specific referrer.
  • Geo. Target visitors from a specific city, region, metro or country. Use Geo targeting to target users from a particular geographic area. For example, you might invite users from a specific city to attend an in-person event or to visit your retail location. While typing in the Values field, you’ll see suggestions from the AdWords Geographical Targeting API to help speed rule creation.
  • Technology. Target users visiting from a specific browser, operating system or device. Optimize looks at the browser’s user agent string to identify which browser is being used, what version, and on which operating system. You can use these data as targeting criteria in Optimize.
  • JavaScript Variable. Target pages based upon JavaScript variable values. Use this type of targeting if you can find the value you’re looking for in the source code of the webpage in the form of a JavaScript variable.
  • First-party cookie. Target the value of a first-party cookie in the visitor’s browser. Optimize can check to see if a visitor has a first-party cookie from your website and use that information in targeting rules.
  • Custom JavaScript. Target pages based upon a value returned by custom JavaScript. Custom JavaScript targeting allows you to inject JavaScript onto a page, then target your experiments based on the value that the JavaScript returns.
  • Query Parameter. Target specific pages and sets of pages. Optimize can check query parameters and use them in targeting rules.
  • Data Layer Variable. Instead of referencing JavaScript variables in your targeting conditions, you can reference key-value pairs that are stored in the data layer.

Match Types

Each targeting option has a variety of different match types.

  • Equals/Does Not Equal. Every character, from beginning to end, must be an exact match of the entered value for the condition to evaluate as true. Evaluate as true when the query parameter does not equal any of the entered values.
  • Contains/Does Not Contain. The contains match type (also known as a “substring match”) allows you to target any occurrence of a substring with a longer string.
  • Starts With/ Does Not Start With. The starts with match type matches identical characters starting from the beginning of the query string up to and including the last character in the string you specify.
  • Ends With/Does Not End With. An exact match of the entered value with the end of the URL. You can target shopping cart pages that use /thankyou.html at the end of their URLs.
  • REGEX Matches/Does Not REGEX Match. A regular expression uses special characters to enable wildcard and flexible matching. Regex matches are useful when the stem, trailing parameters, or both, can vary in the URLs for the same webpage. If a user could be coming from one of many subdomains, and your URLs use session identifiers, you could use a regular expression to define the constant element of your URL.

Free REGEX Book (PDF). If you’ve never used regular expressions, you’re missing out. They’re endlessly useful. LunaMetrics CEO Robbin Steif wrote a short book about using regular expressions for Google Analytics. It’s a great resource for those just starting out.

Editing Your Variation with Optimize Visual Editor

To use the Optimize Visual editor you will need Google Chrome the Google Chrome Optimize Extension.

Once you have downloaded the Optimize Extension, you can enter the visual editor by clicking on one of your variants. When the editor loads, you will see the editor page you defined when setting up the experiment. If you’ve ever used a WYSIWYG editor, this interface will be fairly intuitive. Point and click to select an element, drag and drop to move elements around, and use the blue slide up menu to modify an elements style. Below I provide details about the options available in this editor.

  1. Experiment Name. This is the name of your experiment.
  2. Toggle Variants. Displays a dropdown of variants, selecting one will load the variant into the editor.
  3. Device Testing. This dropdown menu displays stock devices to choose from. Selecting one of the devices will show you how your experiment will look on that device. Desktop is always selected by default.
  4. Number of Changes Made. Clicking on this element will open a menu that shows every change that was made to the current variant, and gives you options for editing or deleting each change.
  5. Diagnostics. This is a count of potential issues with the changes you made. These issues are also flagged in your list of changes.
  6. Custom CSS. If you prefer to working with code, this menu item will allow you to add custom CSS to variant. This is only applied to the variant you’re currently working on, not all variants.
  7. Interactive Mode. If you need to edit content that is hidden by a dropdown or tab, you will need to use interactive mode. Entering interactive mode will allow you click on elements to expose hidden content. You can then exit interactive mode to edit said content.
  8. Settings. There are two ways to drag and drop elements. The default is Reorder. Using the Reorder option
  9. CSS Element Selector. If you know how to use CSS selectors, you can use this feature drill into the DOM. This is the easiest way to do things like modify every <p> element on a page. One of our Analytics Engineers, Kristen Perko, talks about CSS selectors in her article about hover tracking.
  10. Element Hierarchy. This menu shows you how a selected element is nested in other HTML elements. You can use this menu to
  11. Selected Element. When selecting an element, it will be framed in blue. Once selected the blue tab at the top left of the frame will show you what element has been selected, and the element hierarchy bar will change to show you how that element is nested in the HTML. If you are having trouble selecting an element, get close enough with point and click, then use the element hierarchy navigation to traverse the page HTML. If you would like to select multiple elements of the same type, then use the CSS Element selector (#9).
  12. Modify Element Options. This dropdown is presented to you when you right click on the element you selected. The naming convention makes the options self-explanatory.
  13. CSS Editor. If you are not familiar with CSS, Optimize has an editor palette that makes changing styles simple. Just click, or use use the element hierarchy, to select the element you want to change. The CSS palette will populate with all of the styles of that element. Once selected you will be able to change the dimensions, location, font, text size, color, etc. or said element. Clicking on “Edit Element” will give you the same modifications options as right clicking on an element – remove, edit text, edit html, insert html, and run JavaScript.

Running Your Experiment

Once you have made your modifications, click “Save” and navigate back to experiment page. Double check your objectives and targeting options, the you’re ready to start your experiment.

Reporting

It is recommended that you let an experiment run for at least two weeks before looking at results.

As your experiment runs, the first card of your reporting tab will populate with the current winner. Once enough data is collected, Google will declare a clear winner.

The second card on the reporting tab shows how each variation performed for each objective that you set.

The third and final card in your report will show you more granular data about each objective, as well as a nice performance graph.

  • Improvement – For a given objective, the difference in conversion rate, measured as a percentage, between the variant and the baseline.
  • Experiment Sessions – An experiment session is the period of time a user is active on your experiment. By default, if a user is inactive for 30 minutes or more, any future activity is attributed to a new session. Users who leave your site and return within 30 minutes are counted as part of the original session.
  • Probability to beat baseline – The probability that a given variant will result in a conversion rate better than the original’s conversion rate. Note that with an original and one variant, the variant’s Probability to Beat Baseline starts at 50 percent (which is just chance).
  • Probability to be best – The probability that a given variant performs better than all of the other variants. Because there can be only one “best,” the sum of all percentages in this column should equal 100 percent.

What’s Next?

So, you set up a test and you ran it. Now what? Iterate. The success or failure of your experiment has taught you something that you can use to run additional experiments. Think about different forms of testing, or different targeting options. Remember that who you test is just as, if not more, important than what you test. So note what you learned, note what questions came from your experiment, and begin thinking about what your next test would look like if you changed the offer or changed the people who saw the offer. Repeat.


How to Move a Property in Google Analytics

Life Before Property Moving

There have been rumors, whispers and lots of begging polite requests for one of Google Analytics’ most anticipated features – Property Moving.

Prior to this update, planning a Google Analytics account structure was a big deal. Once you chose how many accounts to create and whether each website, business or department should have their own, it was impossible to change. The only way to get all of your properties into the same account was to choose which account to use and make completely new properties for the others.

Account Best Practices

Ideally, each business or organization should have a single account. This one account could then have multiple properties representing each website or websites that the organization manages.

This becomes tricky in some situations like the following:

Agency Choices

Always, always ask to have your own account if you are working with an agency or third-party to set-up Google Analytics. We have seen situations where an agency has one account with separate properties for each client’s site. This is awful because it means that you will never have complete access to your account configuration and account management (for example, to create filters). Even if you haven’t created the website or implemented the analytics yourself, it is your data and you should have 100% permissions and control.

For this situation, the owner of the account would be rightfully hesitant or unable to give you account-level permissions since you would then have access to all of the owner’s other sites. Often we give the advice to filter out internal traffic or setting up basic filters, but our training attendees aren’t able to because of permissions issues- property moving is the solution.

If this sounds familiar, you can ask right now to have the property moved to your own account.

Business Acquisition

This one is much harder to avoid. Even if you plan and use the most sensible account structure, there may come a time when your company acquires a new site or a new business. This is common with news organizations, publishers and universities. In this case, the sites would be split into multiple, legacy accounts. One of the drawbacks here is that governance around user access and permissions becomes less manageable. Also, you cannot take full advantage of the 360 Roll-Up Property feature to aggregate all of your business’ data.

Introducing Property Moving

The Property Moving feature is exactly what it sounds like- we now have the ability to move properties from one account to another without losing any historical data. This means that Google Analytics can keep up and reorganize as your company reorganizes and grows.

Who is it for?

Property moving is available to both Google Analytics 360 and Standard (free) users. No matter how long your property has been collecting data or how much data you have, you will be able to use this feature.

It is especially useful for publishers or large organizations using Google Analytics 360 with sites in several accounts. For the first time, it will now be possible to use the Roll-Up feature. Rolling up properties to view aggregated data is valuable but all properties must be in the same account.

What It Isn’t

Remember that when you are moving a property, you are completely removing it from the account and not duplicating or copying it. Make sure everyone with access to the account is aware of the change and the implications. If only one property was in the account previously, the account can and may be empty once the property is moved out.

You are also not starting from scratch when you move the property. The legacy data will move into the new account as well.

In terms of account structure issues, this fixes the problem of properties being divided into separate accounts. However, this is not a solution for a website or websites that have been divided into multiple properties when they should be in one. For those types of questions or concerns, posts on cross-domain tracking and set-up should be helpful.

How To Move a Property

Moving properties from one account to another is a simple process to the user- the complex work happens behind the scenes. First, you need to make sure that you have the highest permissions on both accounts: account-level “Manage Users” and “Edit” permissions.

Then, after choosing which property to move, go to that property’s settings and find the “Move Property” button. If you cannot see this button, that is a sign that you do not have the necessary permissions.

From there, you have the option to retain the same user permissions for the property (and the views within) or to overwrite the permissions with the users and permissions on the destination account.

After confirming, you’re done! The move is quick and takes a few minutes at most so refreshing the Admin screen after a moment will likely reflect the move.

There are situations where you can’t or shouldn’t move a property to a different account.

  • When the destination account is Google Analytics Standard and already has 50 properties (360 allows for 200)
  • For Google Analytics 360 users: When the property is outside of the 360 suite and you are trying to link to a property within the suite.
  • For publishers: When you have already integrated DoubleClick for Publishers to your properties. I am hopeful that this will become another supported link for property moving. Right now it has to be unlinked, moved, and then must go through the process of re-linking with the request form, subsequent email contracts and Google enabling it for every property.
  • For multi-site organizations: Roll-Up properties cannot be moved. It would be a better strategy to move properties into the account where the existing Roll-Up is.

FAQ

Does the property number (UA-) stay the same?
Yes, the property will have the same ID even though it is in a new account.

Will my views be deleted?
No- moving the property moves all of the views within the property as well. They will still have the same filters, settings, dashboards, goals and annotations. Filters aren’t necessarily moved, they are copied to the new account. This is good because it means that if the filters are used in other properties’ views, the filter won’t disappear.

If I am using a tool or reporting API with views in the property, will my reports break if the property is moved?
No- since the view ID remains the same, all API reports and plugins should work just fine.

Will this break my BigQuery integration?
No- since the view ID remains be the same, BigQuery should also not be affected.

Will I have to reconnect AdWords?
No- property moving supports AdWords, AdSense and AdExchange linked accounts as well as DoubleClick Campaign Manager. Also, there should not be a gap in data since the move is so quick.

Will I have to edit my Search Console settings or re-verify?
No- this connection moves along with the property, so no additional action is needed.

There are circumstances where property moving will make a significant change, such as using Roll-Ups or organizing several historic accounts into one. However, there are also situations where you should not or cannot move properties (for example with different 360 accounts or in cases where DFP is already linked to the properties). Even though there are a few limitations, the ability to move properties is an important and much-awaited update to Google Analytics. It shows that the platform is moving even more toward enterprise and large-scale web analytics.


The Complete Guide to Content Optimization

Content marketing has already solidified its stature as a powerhouse in the digital marketing space.

In growing a brand’s audience and customer base, it’s certainly proved how formidable the practice is, especially when integrated with other data-driven disciplines (like SEO).

It’s no longer a trend. It has already forced its way to stay.

The post The Complete Guide to Content Optimization appeared first on Kaiserthesage.


You Might Be Your Own Biggest PPC Competition

Paid search competition comes in many forms. The competition is usually what we would expect – those other advertisers that are acting in the same commercial arena vying for the attention of consumer. Paid search competition has an interesting twist because your competitors can also include advertisers in completely different markets bidding on keywords similar to your own. In other words, you are competing with ALL advertisers that appear in an auction regardless of whether or not your actually participate in the same market sector.

These are the obvious examples, but paid search is rife with nuances that often go unseen until we start to peel back the layers in order to gain an understanding of how the whole system works. For example, did you know that there is another form of PPC competition that might be hiding right under your nose?

It lives in your own account.

That’s right… You might be your own biggest AdWords competitor. This comes in the form of internal keyword competition. Internal keyword competition?!

GASP! The horror of it all!

What is Internal Keyword Competition?

Internal keyword competition occurs when you have two or more “duplicate keywords” that share identical targeting in your Google AdWords account.  Duplicate keywords that compete against each other directly share the same exact syntax and match type – it is quite literally a copy of a keyword.  Identical targeting means that the duplicate keywords share the same geography, language, time, device, and/or audience settings.

These phenomena occur most often when the same keywords appear in multiple campaigns but can also occur when identical keywords are found in two or more different ad groups within the same campaign.

Because both keywords are technically eligible to serve in any and all instances in which they are present (so long as status is approved and eligible), AdWords must choose only one keyword to enter the auction.  You cannot have two or more keywords enter the same auction, so the system must decide which instance to utilize upon serving up the ad impression.  The keyword that AdWords chooses to trigger will be the keyword resulting in the greatest calculated Ad Rank.  See more about how Google AdWords chooses to trigger your keywords.

What Does That Mean for Your Performance?

Increased CPCs

Unfortunately, internal keyword competition usually leads to increased CPCs because you are competing – bidding – against yourself to achieve the highest ad rank possible.  If you have two identical keywords with identical targeting they will share a quality score.  Furthermore, if the only differentiating factor between these keywords is the max CPC bid, AdWords will choose to serve the keyword with the higher bid because it will result in the higher calculated ad rank.

Assume the keywords below are present in two different campaigns that share identical targeting settings:

Keyword

Max CPC bid

Quality score

Ad Rank

Ad Served?

[manatee protection group] $1.00 7/10 7
[manatee protection group] $2.00 7/10 14

As we can see, the keyword with the higher Ad Rank is served.  What truly sets the keywords apart at auction-time is the bid.  In this instance the $1.00 max CPC bid would usually be enough for the ad to enter the auction but the advertiser is creating her own internal competition because another keyword with a higher max CPC bid is present in the account.  That second keyword, the one with the higher resulting Ad Rank, will be selected during these moments and will ultimately drives costs unnecessarily higher for that select search term.

Poor Experience & Mixed Messaging

Internal keyword competition also creates issues when messaging variants are introduced.  There are strategic shortcomings in these instances because advertisers lose control of which ads are served to potential customers resulting in poor user experience and convoluted messaging.

Let’s review an example:

Again, assume the identical keywords below are present in two different campaigns or ad groups.  This time the keywords share an identical bid and it is the landing page varies between the two terms.

Again, the keyword with the higher Ad Rank is selected.  This time, it is the resulting quality score that determines the outcome because the keywords have identical bids ($2 in this instance).

Perhaps the advertiser’s strategy is to drive traffic to the donations page for their annual “end of year giving” season.  To drive these donations that are willing to sacrifice some quality for the purpose of generating awareness of their cause.  Since the ad driving users to www.manafree.org/save-the-manatee was not intended to be served for this query you can see how this might present some strategic issues.

The lesson here is that if you don’t really seize control over which keyword-landing page instances take precedence you can skew your strategy.  There is a clear flaw in the campaign configuration, as we can see above, that causes the strategy to fall flat.  Users will not see the right message and future performance analysis will be difficult to dissect.

Warning for Multi-account Advertisers

These phenomena don’t just happen in individual accounts either.  For those advertisers managing complex digital marketing projects that span multiple AdWords accounts, you should be on red alert.  This undoubtedly will occur as different product or service marketing teams vie for valuable traffic.

Unfortunately, there is a finite amount of traffic based on the relevant terms associated with the brand.  These different teams within the same organization usually step on each other’s toes as they seek to win the “most lucrative” AdWords auctions.  If everyone is targeting the same keywords throughout the organization, then everyone is driving up everyone else’s CPCs.  This traffic is often even of the branded variety!

Examples

  • Colleges and universities promoting various schools, branch campuses, and online degrees frequently fall victim to this nuisance behavior as various initiatives take precedence over others and separate marketing teams seek to win the eyes of prospective students.
  • Enterprise organizations providing layers of unique services and solutions should build comprehensive messaging that speaks to all solutions rather than assuming users will search for complex naming conventions that are used internally at the organization.
  • Ecommerce companies working with various distributors that also bid on their product terms should be generally aware of this behavior and try to grasp whether it is better to be a strong competitor in these auctions or to allow their distributors to win the bid and facilitate the sale – there are major ROI analyses to look into here. Consider a product that is sold on your website and also at the local Target.
  • Non-profit organizations managing both standard and Google Grants accounts should be aware of how budget is distributed among the keywords in their very different accounts which can be limited by a capped max CPC bid.

Diagnose & Resolve

Now that you better understand what causes internal keyword competition, you can prevent it.  But how do you find if it is already happening in your account?

Luckily there’s a quick way to diagnose potentially harmful instances of internal competition within your account with the help of Google AdWords Editor and the “Find Duplicate Keywords” tool.  You can find the tool in Google AdWords Editor under the “Tools” menu selection.

The tool allows you to select which campaigns and/or ad groups to evaluate for keyword duplication.  After opening the tool select the campaigns or ad groups that you would like to evaluate.  To find true instances of internal keyword competition, you should ensure that campaigns and ad groups share targeting settings such as geography, device, and those outlined above.

Set the word order to “strict word order,”  set the match types to “duplicates must have the same match type,” and set location to “across select campaigns” to find absolute duplicates.

Once you click the “Find duplicate keywords” button, the tool outputs a filtered result that allows you to remove or pause duplicates at your whim.  You might even go the extra mile to ensure that your negative keyword implementation is working to prevent future instances of internal keyword competition from occurring by excluding the specific search term in the campaigns are ad groups which you intend to no longer serve for those specific queries..

This is a great time- and cost- saving practice to get into the habit of adding to your management routine.  All account managers should do this at least once to review the status of their account and to determine if there are any unforeseen account issues to be resolved.

Give it a shot to see if internal competition is affecting your account and bottom-line.

Internal Competition & Separate Accounts

If you control the account for your company and create the campaigns, there are tools like the one above that will help you identify and fix those issues. However, if you’re in one of the scenarios where your department may be targeting the same keywords as another department within the same company, you now have a much different issue because of the separate accounts involved. Your challenge is: communication.

You should find a way to work together with other departments and possibly agencies that are all working toward similar goals. This is an exercise that will result in both cost savings across the organization as well as a means to improve the traffic quality for everyone’s respective initiatives. Working together will help show the right ads to the right audiences, ultimately matching user intent to the product or service that best suits their needs.

Focus on the following tasks when discussing:

  • Strategy: Which keywords are being targeted by which departments? Where is there overlap? Who owns the generic or branded search terms and who should be targeting more specific queries?
  • Targeting Features: Are there opportunities to specify the context of your keywords (adding granularity)? Can you include negative keywords to avoid overlap with other accounts? Are there opportunities to leverage remarketing audiences to help in concert with general keywords to funnel pre-qualified audiences to more specific results?
  • Messaging Features: Collaborate with other teams to make sure general and branded terms still advertise more specific options via extensions like sitelinks.

Collaborating across departments and marketing teams is the biggest challenge here. Use the concepts here to open this discussion within your organization and begin crafting a plan on how best to work together. When departments operate completely independently of each other, they truly act like competitors – driving up costs for each other and potentially harming the messaging and experience for the very users they are trying to attract.


Mastering WordPress Filters

how we filterIf you are reading this series in order, then you just finished reading about using WordPress Hooks to modify how your site using some out of the box code rather than another bloated WordPress plugin.

WordPress explains the two different types of hooks available like this:

  1. Actions (Codex Action Reference)
  2. Filters (Codex Filter Reference)

You can sometimes accomplish the same goal with either an action or a filter. For example, if you want your plugin to change the text of a post, you might add an action function to publish_post (so the post is modified as it is saved to the database), or a filter function to the_content (so the post is modified as it is displayed in the browser screen).

Now that you are totally up to speed… what? That wasn’t as clear as you hoped? Ok, let’s break it down by looking at a couple of examples.

Getting Started with WordPress Filters

One modification that I use on my own personal WordPress site (and sometimes for clients) is adding additional fields to user accounts that include social networks. After a little bit of work, this is what it looks like.

Phil Buckley's 1918 Author Archive page

To get that page to include all those social networks without having to insert it some crazy way, I made additional fields by adding the following code to the functions.php file.

WARNING: If you make a mistake editing your functions.php file, your site can become unresponsive to web requests – which means you’ll have to fix it via FTP or SSH.

function my_new_contactmethods( $contactmethods ) { //** Add Twitter */ $contactmethods['twitter'] = 'Twitter profile URL'; //** Add Facebook */ $contactmethods['facebook'] = 'Facebook profile URL'; //** Add LinkedIn */ $contactmethods['linkedin'] = 'LinkedIn profile URL'; //** Add Pinterest */ $contactmethods['pinterest'] = 'Pinterest profile URL'; //** Add Foursquare */ $contactmethods['foursquare'] = 'Foursquare profile URL'; //** Add Scoopit */ $contactmethods['scoopit'] = 'Scoop.it! profile URL'; //** Add Quora */ $contactmethods['quora'] = 'Quora profile URL'; //** Add Yelp */ $contactmethods['yelp'] = 'Yelp profile URL'; //** Add Flickr */ $contactmethods['flickr'] = 'Flickr profile URL'; //** Add Tumbler */ $contactmethods['tumblr'] = 'Tumblr profile URL'; //** Add Vimeo */ $contactmethods['vimeo'] = 'Vimeo profile URL'; //** Add WordPress */ $contactmethods['wordpress'] = 'Wordpress profile URL'; //** Add RSS */ $contactmethods['rss'] = 'RSS feed URL'; unset($contactmethods['yim']); unset($contactmethods['aim']); unset($contactmethods['jabber']); return $contactmethods;
} add_filter('user_contactmethods','my_new_contactmethods',10,1);

The code above does a couple of different things. The function (my_new_contactmethods) adds a bunch of fields for me to enter my profile on those platforms and also removes (unset) the fields for Yahoo Instant Messenger, AOL Instant Messenger and Jabber – since I don’t use them. I then add those new fields by calling add_filter to shove them into the user_contactmenthods for every user.

This is what my contact area looks like.

WordPress Contact Info with new fields added

Now that I added those additional contact methods, I can call them with a specific function and drop them into my author archive page. Since I don’t ever want to modify code directly, we return again to the functions.php page and insert those social profiles.

I won’t go into the additional tweaking I do to my own author archive to get the intro the way I wanted it, but here is how I go about inserting the (first few) new contact fields into the page.

echo '<div id="connectbar">';
if (get_the_author_meta('googleplus')) { echo '<a href="'. get_the_author_meta('googleplus') .'" rel="author" class="google_icon" title="Circle me on Google+">Circle me on Google+</a>';
}
if (get_the_author_meta('twitter')) { echo '<a href="http://twitter.com/'. get_the_author_meta('twitter') .'" class="twitter_icon" title="Follow me on Twitter">Follow me on Twitter</a>';
}
if (get_the_author_meta('facebook')) { echo '<a href="'. get_the_author_meta('facebook') .'" class="facebook_icon" title="Friend me on Facebook">Friend me on Facebook</a>';
}
if (get_the_author_meta('linkedin')) { echo '<a href="'. get_the_author_meta('linkedin') .'" class="linkedin_icon" title="Connect with me LinkedIn">Connect with me LinkedIn</a>';
}
echo '</div>';

I use the class tags to call a small background-image to make it look like a clickable button that changes color when you hover over it.

#connectbar a.twitter_icon { background: #f0f0f0 url(/wp-content/themes/eleven40-pro/images/twitter.png) no-repeat 0 0;
} #connectbar a.twitter_icon:hover { background-color: #48c4d2;
} #connectbar a.facebook_icon { background: #f0f0f0 url(/wp-content/themes/eleven40-pro/images/facebook.png) no-repeat 0 0;
} #connectbar a.facebook_icon:hover { background-color: #3b5998;
}

Let’s look at something a bit easier, and also something that gets asked about more frequently.

Using WordPresss Filters to Remove the Footer Text

In almost every WordPress theme, the developer leaves a link at the bottom. Below is an example from the Author Pro Theme from Studiopress.

WordPress footer attribution

You may love your theme so much that you are cool leaving the attribution link in the footer, but what if you’re not? There’s a simple way to remove it, and yes, it’s totally legal to remove that stuff. The code below is specific for the Genesis themes, but the concept is the same.

  1. Dream up what you would like in the footer
  2. Use a WordPress filter to change the default text in the footer

Once again, you’ll need to edit the functions.php file to add a snippet of code. Below we want the footer code to say © <current year> Acme Widget Company.

add_action('wp_footer', 'my_footer'); function my_footer () { echo '<p>&copy; '.date('Y').' Acme Widget Company.</p>';
}

Your theme may be set up slightly different, so be prepared to dig in a bit if that’s the case.

Using a combination of WordPress Hooks, Actions and Filters you can accomplish almost anything in WordPress.

If you’re interested in using WordPress Actions, you can follow along with the super simple example in the previous post in this series.

Optimizing Your WordPress Site Series


Do I Need Cross-Domain Tracking?

Cross-domain tracking is one of the more complex, confusing and often misunderstood areas of web analytics. It involves cookies, browser security settings, and an understanding of your overall measurement strategy.

I hope to simplify some of this for you with a simple flowchart, that will tell you whether or not you need cross-domain tracking to begin with. This is the first question that frequently stumps web analysts.

But before you dive into the flowchart, let’s get some things straight:

Let’s Define domain and subdomain

We’ll be defining domain and subdomain for the purposes of cross-domain tracking in Google Analytics.

As such, this is a simplistic explanation of the distinctions, and doesn’t fully examine the subtle differences. If you’d like to learn more, the Wikipedia entry for Domain name is rather extensive.

The domain (also called the root domain) is the part of the website address immediately before the .com (or .net, .edu, .org, etc.). For example:

Full Website URL: http://www.example.com

The Domain Is: example

The subdomain is the part between the http:// and the first dot (.). In our example, www is the subdomain, but consider the following examples:

Full Website URL: http://video.example.com

Full Website URL: http://blog.example.com

Full Website URL: https://shop.example.com

The Subdomains Are: video, blog, and shop, respectively.

Bonus: For extra credit, the part at the end – com, org, edu, etc. – is called the top level domain, or TLD. This is important because from the perspective of cross-domain tracking, example.com and example.org are considered two separate domains.

Do I Need Cross-Domain Tracking?

We use cross-domain tracking with Google Analytics to track multiple websites into one property and to make sure that one user that travels between multiple sites is tracked as a single user. Generally this means that even though there are multiple domains, they serve the same audience and appear to the user as if they’re the same site.

Sometimes, cross-domain tracking is not necessary. Take a look this flowchart:

If you followed the chart and determined that cross-domain tracking is necessary, then we’ve got a great setup guide for Google Tag Manager. You’ll need to be able to make changes to your website code or through Google Tag Manager, and you’ll need to follow several steps, which we’ve outlined for you.

What About Subdomains?

Cross-domain tracking only applies if you have multiple domains. If you have a single domain with multiple subdomains, cross-domain tracking is not necessary!

If you have two or more subdomains that you’re tracking into the same Property in Google Analytics, the default tracking code for that Google gives you to put on your site is already set up to automatically work across your subdomains.

This wasn’t always the case. With the older versions of the Google Analytics tracking code (anything before Universal Analytics and the analytics.js library), you had to modify your tracking code to explicitly tell Google Analytics to set the cookie at the root domain level. That way, all of your subdomains would be able to read and write to the same cookie. Now, that happens automatically.

There are two easy steps for cross-subdomain tracking, 1) Set the Cookie Domain and 2) Update Your Referral Exclusion List. For more information, check out our guide here:


Using WordPress Hooks Like A Boss

WordPress Hooks

hooksWhen you get started with WordPress, you are in awe of the power of Plugins. As you get more exposure you realize that they are often just adding a little bit of code into the hooks that WordPress makes available.

For example, there are a lot of plugins available to insert something into the head tag of your site. But you can also do it without the overhead of a plugin by using the built-in WordPress hook.

If you’re slightly code-phobic that may seem terrifying. So let me share a super simple copy-and-paste example that you can use in your functions.php file.

WARNING: If you make a mistake editing your functions.php file, your site can become unresponsive to web requests – which means you’ll have to fix it via FTP or SSH.

You can find your functions.php file either through the WordPress backend or FTP.

functions.php via FTPfunctions.php under settings in wordpress

WordPress Actions

The easiest way to insert something into the head of every page on your site is to register a function to be executed when the built-in wp_head action is called.
To do that, you’ll need to add the following line into your functions.php file:

add_action('wp_head', 'my_function');

You probably already have some code in your functions.php file, so add this near the bottom. It will probably end up looking more like this:

/** * Customizer additions. * * @since Twenty Fifteen 1.0 */
require get_template_directory() . '/inc/customizer.php'; // This is my special function to insert something into the head tag add_action('wp_head', 'my_function');

At this point, you’ve told WordPress, “when you are building out a page and filling in the head tag make sure you also include my my_function call as well.” The next step is to create the my_function so WordPress can include it.

Since we’re only doing this as an example, all we’ll include is an HTML comment that you’ll be able to see in the code, but won’t be displayed for the world to see.

/** * Customizer additions. * * @since Twenty Fifteen 1.0 */
require get_template_directory() . '/inc/customizer.php'; // This is my special function to insert something into the head tag add_action('wp_head', 'my_function'); function my_function() { echo '<!-- this is a test -->';
}

Now you can see that the action you’re adding is to insert that silly commented line into the head of your site. Obviously, this is just an example, but you can use this exact procedure to inject whatever you want into the head of your site.

view source custom head insertion via wordpress hook

Sometimes all you need is something like that on one page. To do that you can add additional if/then code around the function above, or build out a quick custom field.

Using Custom Fields with Hooks

If you don’t need something injected into every single page on the site, then you can build out a way to only include it on pages where it’s needed. To accomplish this we’ll use WordPress’s custom fields to call a function that is wrapped by a conditional.

First off we need to expose the custom field section because it’s usually hidden by default. Click on the Screen Options tab in the upper right of your WordPress administrative area.

Expose the custom field section

Then click the checkbox to show custom fields.

Show Custom Fields

You can then close the Screen Options tab by clicking on the arrow in the tab and then scroll on down to the newly exposed Custom Fields section. This is where you will create a brand new custom field.

To add a new custom field you click the “Enter New” link (not the button).

Add a new custom field

Clicking on the “Enter New” link allows you to enter a name for the new custom field. Let’s call ours “custom_head”.

New Custom Field

You then complete the new field by adding a value for the “custom_head” field and then clicking on the “Add Custom Field” button.

custom field value

You have just created a custom field that you can now use almost anywhere.

Newly created custom field in WordPress

Now, that custom field is added to the meta data for the post that I added it to. What that means in English is… that little snippet of code that we labeled at “custom_head” is stored in the WordPress database and linked to the post where I first created it. It will also be attached to other posts if I choose to use it again.

NOTE: The next time you want to use that custom field, it will appear in the drop-down menu in the custom fields section, you only have to create it once.

Now you have to head back to the functions.php file to add a little bit of code so that your new custom field can get injected into the head of the document it’s attached to.

Because our snazzy new custom field is stored in the database as meta data, WordPress has provided an easy way to retrieve it using get_post_meta.

Let’s add the new code in a step by step manner. First we’ll be quering the database from within “the loop” so we can ask it for the custom_head meta data for the current post.

/* This is my special function to insert something into the head tag by using the custom field called "custom_head". */ add_action('wp_head', 'my_function'); function my_function() { global $post; echo get_post_meta($post->ID, 'custom_head', true);
} 

With the updated code, we can specify what to add to each page. This is another place where I can warn you about messing up your functions.php page and tell you that there are plugins available to do this type of thing. But to run lean and mean, you can follow the examples above.

WARNING: If you are using a theme that is NOT a “child-theme”, then your functions.php file will be deleted and replaced every time you upgrade the theme. Child themes are meant to be used for customizations on upstream parent theme. WPBeginner has a good tutorial on this.

For more good examples you can check out Ed Stafford’s post on how to Use Custom Fields To Add Keyword Metadata to Your Posts and the 2 part series at Perishable Press on custom fields.

Next stop, WordPress Filters.

Optimizing Your WordPress Site Series