Author Archives: admin

Davinci – Text Editor Color Theme Translation

Davinci is the result of my first foray into Open Source Software – When I have attempted to change my default text editor of the years, the one thing that consistently prevented me from doing so was not being able to get used to the slightly different color schemes in the new editor.

I set out to fix this problem using Sublime – my editor of choice, and Atom, which seems like the new up-and-comer in the world, and I created Davinci – a ruby command-line gem that parses an intake file or directory and spits out a new theme for a different editor. You can find it here: https://github.com/mattcheah/davinci.

Material theme comparison
How does this witchcraft happen?

Simply put, a parser (xml or regex) reads a theme file and searches for specific settings which it slots into an options hash for specific pieces of code (comments, strings, function names, function arguments, integers, constants, language-specific variables, etc.) A template from the output text editor is then searched to replace option-specific strings with the values parsed from the original document.

For future releases, I intend to add additional I/O controllers for new text editors like Brackets or Dreamweaver (or Vim, for the crazies.)

A Theme Translating Tool That Works Perfectly Every Time?

Revolutionary! Mind-Blowing! Inconceivable!

No. Someone lied to you. Each text editor has it’s own method of adding specific styles to its code. Atom is built on the Google chrome platform so it’s underlying architecture is similar. This also means that all content on the page is styled using CSS by applying different html classes to pieces of code.

Sublime, on the other hand, is styled by an XML document that specifies different schemas for code elements, with each schema nesting more levels that apply to more specific code elements.

As such, there is no one-to-one ratio for applying colors to specific code, meaning that often times there’s some guess work involved in assigning a color from a schema over to a class, or vice versa.

This is further complicated by the fact that not all theme developers will write their themes using the same schemas or classes, and therefore sometimes Davinci will use the color assigned to a general schema when it was intended for a more specific element.

As an example of the difficulties encountered – Atom considers a variable passed to a Ruby block to be a syntax--variable, but Sublime does not consider this to be related to a variable, meaning that this color must be changed manually if one wanted the new theme to be a perfect copy.


This was an interesting discovery for me, because it led to the realization for this project at least, there are some things which i could fix, but they would require a lot of time and energy, and would probably result in a lot of code bloat. Sometimes it’s easier to do the work by hand, unfortunately.

An Open Source Adventure!

This project is about more than just helping myself to move on from Sublime, although i’m sure many of us could use a hand with that. It’s also about learning how to work in OSS – as a developer I feel I’ve been rather compartmentalized in my own world working on my own projects, and I know that opening myself up to feedback and collaboration would probably do wonders for my ability to think about developing software as a part of a team and not as a one-man-band.

As such, I’m looking for feedback regarding several issues:

  • How efficient my code is:
    • Is it intuitive? Is it DRY?
    • Is it easy to understand and follow along?
    • Does it violate anything that might be considered ‘The Ruby Way’?
  • How well does it solicit collaboration? Have I included anything that is off-putting to potential collaborators?
  • How can I improve the concept?

I’ve already learned quite a lot from simply taking ownership and solving an issue I wanted to solve, but I’m hoping that collaboration on Davinci in the future will lead me to even more improvements in the way I write code and in the way I interact with other developers.

Davinci can be found on rubygems under the name davinci-text

Alexa Skill Certification: Complete


Amazingly, I have done it.
This was a fairly difficult undertaking and took me through multiple development learning phases including:

  • Understanding how Alexa interprets intents and slots, and how it routes information through those intents
  • Figure out how Amazon employs account linking and uses OAuth
  • Using Node for the first time and working out kinks in HTTP requests
  • Being forced to figure out how promises work make sure that all API requests go through.
  • Deal with several quirks in the new Alexa Skill Builder (beta)

I’ll go through some of these in detail and cover how I dealt with the issues as they came up.

Intents and Slots:

One of the ridiculous things I said prior to building this app was that I wouldn’t need any custom slot types, which came from not really understanding how slots worked and how I could pass information to the app with custom slots. Obviously my ‘do-list items’ had to be passed in as a custom slot type. Here were a few more things I learned regarding intents and slots:

Any intent can be triggered from any interaction

I set up my skill separated into different states so depending on what state a user was in, they might get different responses if they trigger the same intent. I used this to funnel users down a path with the least likelihood of triggering an intent that they did not want. For example, when Users say “Alexa, ask calendar to-do to add something to my list”, they would enter a state within the app for which there should only be two options – Say an item to add to the list, or cancel. (or help, or stop, etc etc, whatever.) However, I learned that these states don’t necessarily prevent a user from triggering an intent that is not listed in that state – from this state of adding an item, the user can say something and if Alexa interprets that to mean that you want to remove an item from your do list, you’re out of luck. The only way to get around that is to run the same code regardless of whether you’ve triggered one intent or the other.

Interpreting any string in a slot can be a lot of work

People can put an unlimited variety of things in their to do lists, and my paltry list of 20-something sample utterances simply did not recognize when I said something abnormal like ‘brush my chinchilla with salsa.’  Interpreting literal strings, as I discovered, was much easier to do if the sample utterances had a larger base to draw from – cue me coming up with some of the most outrageous to do list tasks ever until I had ~100. (eg. “broker a peace agreement in the middle east”, “solve America’s opioid epidemic”, “reform the criminal justice system”, “run America like a company”, and many other items that might be on random guy’s list who we’ll call, say, Jared.) That seemed to solve the problem. Thanks Jared!

Account Linking:

Account linking is literally the easiest thing when you’re connecting to a Google API. You don’t need to know anything about OAuth, and you don’t need to do anything extraordinary. Unfortunately, I didn’t know that it was easy, and it ended up being one of the most frustrating things throughout the development process.

The backbone of the skill is making API requests to google calendar to read and write your to do list, thus the user has to link their account within Alexa App. The easiest way to do it, (if you’re using a Google API, or presumably another API that uses OAuth, is to set up your google API in the console, and then copy the all of the required information into the alexa account linking section in the configuration tab. (Client secret, Auth URL, client ID, Token URI, etc.) – note: I read that you have to add subdomains into the domain list if you want to pull information from a subdomain. I have it set up this way but I am not sure if it is true. (ie. I have both google.com and accounts.google.com in my domains list to make sure that the account linking works getting an access token from https://accounts.google.com/o/oauth2/token)

The biggest problem i ran into was the access token not getting refreshed, and I had to re-link the skill every hour if I still wanted to use it – obviously not an acceptable issue. After scouring the web far and wide I found a forum post saying that I had to add `?access_type=offline` to my authorization URL, so it looked like this: https://accounts.google.com/o/oauth2/auth?access_type=offline. This solved my issue immediately.

NodeJS:

For my first time using node I was fairly happy with how simple it seemed. There’s something about writing in normal JS that’s so calming and doesn’t make you want to pull your hair out and smash things. All of the modules are well documented and there seems to be a good community of developers with plenty of answers to difficult questions. I’m looking forward to using Node in the future for sure.

actually making the HTTP requests was a little more frustrating, since the entire concept is a little bit over my head, but again the documentation in the request module and the simplicity of trying new things was good enough to get me started. The real problem was when I started sending responses to Alexa before I had received a response from the server, which led me to…

Promises!

Having not had to make a ton of continuous API requests in the past, I had only really known about the concept of promises without really understanding how to use them. I had to really get into it and figure out how to chain my multiple api requests together and get those responses before I could move onto the next step. Suffice it to say, I’m extremely happy that I was forced to learn that, as I’ve been in multiple situations where I just descended down the callback spiral and found myself wondering why there wasn’t a better way. Now I know!

Some frustrations:

Documentation

I may be completely wrong about this but my overall feeling with development was that there were a lot of sample projects that you could work on that would help you understand how to develop a skill, but there was no documentation devoted specifically to development – what the Alexa object was, how to get a slot value, how to set up different states, etc. All of this information could be found by poking around different examples, but as with everything in the development world, people tend to do things differently and if your project isn’t set up the same way as someone else’s that can tend to be frustrating. There was a bunch of documentation set up to discuss the concepts of intents, slots, account linking, responses, etc. but there was not very much discussing how to put those concepts into practice.

Testing

This is more of an issue with AWS Lambda, but do I really have to upload my entire project every time I make a change to my code? Is there no possible way to have a text editor that can tweak something very quickly, or just allow for me to upload 1 document instead of the multiples that I have in a zipped file? Making minute changes when testing the service was one of the most time-consuming, frustrating processes because it would take 5 minutes to test just one thing. I’m sure there is a better way (eg. hosting the code myself.) but I don’t know how to do that so I guess i’m stuck with the lambda environment.

Support

This is no one’s fault in particular, but I noticed that the developer community for this particular product is much smaller than a community for a language or framework (as is to be expected) so it takes a much longer time to find out if someone is having the same problems as you or how to solve said problems. Several of my questions on the amazon developer forum went unanswered and though I do appreciate that they have amazon staff working to respond to people’s questions, it’s still a pain to have to wait so long for an answer before you can continue with your project. As I move into more projects like this though, I suppose I should get used to it.

I’m done!

If you want to take a look at my skill and use it, you can find it here:
The github page for the skill can be found here: https://github.com/mattcheah/alexa-calendar-to-do, if you want to make any changes or add any functionality for yourself.

I have a few planned improvements when I have time – namely that Amazon is now allowing developers access to the existing to-do lists on that a user has on their apps, so I’d like to add the option of downstream and upstream syncs so that when you use your calendar do list skill, it will pull all of the information from the built in Alexa do list and add it to the list on your calendar.

I’d love to hear feedback or any other thoughts! Thanks for reading guys.

Starting a new Alexa skill from scratch

That’s right! I’m going to attempt the impossible.

Since I don’t have a ton of fun smart lights or windows or doors etc etc laying around my house, I figured I’d utilize Alexa for skill planning and time management. My wife and I usually have a “to do” list in our shared google calendar. This to-do list moves every day, if not to the current day then to the day when we will have time to do the things on the list. Sometimes there are busy days when we don’t have anything to do. Sometimes there are free days, and my wife will move the list to that day.

Alexa already has functionality to tell me what’s on my calendar for the day I’m asking about. Alexa doesn’t, however, have functionality to read the description of that event, parse it, and give me a list of everything on my to-do list. (or even add to it and subtract from it.) I’d like to leverage the Google Calendar API and an AWS lambda function to create a skill that will help me to read/write to the calendar and to give me an option to hear the list of things I need to do that day.

So getting started, I need to write out/create my:

  • Intent Schema: Ideas for this include “GetAllDailyItems”, “PeekDoList”, “AllDoList”, “AddToDoList”, “CompleteFromDoList”, “Help”
  • Custom Slot Types: I don’t anticipate needing to create any custom slot types but we will have to see how I can interpret data from the Google calendar API and pass it to the lambda function.
  • Built-In Slots: After a brief review of the built in slots, I might need “Day of the week” and “month”.
  • Sample Utterances:
    • “PeekDoList Alexa, What do I have to do today?”
    • “PeekDoList Alexa, What’s on my to-do list?”
    • “AllDoList Alexa, Read all of my items on my to do list.”
    • “GetAllDailyItems Alexa, What is on my calendar today?”
    • “AddToDoList Alexa, put {item} on my calendar do list today.”
    • “CompleteFromDoList Alexa, mark {item} on my calendar do list as complete.”
    • “Help Alexa, help.”
  • A Visual Representation of The Menu/Model: I’ll take a stab at this after setting up the intents and samples properly.
  • Companion App Cards: Not sure if this will be needed as the visual representation will be right in the google calendar.

I’m sure this will be messy but we’ll try to get it done.

Playing with Alexa

Today I started working on a new project – writing a simple trivia game to be played using Amazon’s Alexa service. By writing, of course, I mean copying someone else’s work as a template and following a tutorial to get the results I wanted even though I never actually knew what I was doing.

From my understand of this though, there are two sections to publishing a ‘Skill’ that can be used by an Amazon Echo/Dot/Tap/etc.
The first is a Lambda function from Amazon Web Services which contains all the code for your skill. This is connected to your Amazon developer console where you can create Alexa skills and set up instructions for how your code interacts with Alexa. From this console you can test your created skill and submit it for publishing.

The entire scope of AWS seems massive, and the Lambda function was just one of around 50 services used for computation, development, data management, security, etc. That alone was extremely intimidating, but there were also so many services that Amazon can connect to and so many different ways to use Alexa that it feels like it would be very difficult to get the hang of everything. I’m assuming that most people only focus on one kind of thing though.

For now i’d be interested to learn more about how Alexa interacts with outside services. I’m very interested in home automation and I’d love to integrate my own skills that can be used inside my house. I guess we’ll see how this goes with the next few alexa projects.

Google “Fetch and Render” Pages Visible Immediately.

Here’s a surprise for those of us who always complained that Google works too slowly for their liking. I just added a new page on the attorney site that I’m working for and I submitted it to the index via the Google Search Console “Fetch and Render” feature. Having used the feature sparingly in the past, I had assumed the indexation would take anywhere from 20 minutes to 2 days, but apparently Google has been on top of their game. After clicking “submit to index,” I immediately did a quick search for the content on the page and it came up! Good job guys.

I have the Index. You can just float and sputter.

Google My Business Bulk Locations Updated

I just received an email notifying me about some changes to the Google My Business Locations interface.

Upgraded Account

This interface might be a little bit different from what GMB users are used to, especially businesses without multiple locations, but it seems like this is much more intuitive and beneficial for businesses with hundreds or thousands of locations. Fortunately this interface is far improved over the awful Google Places bulk upload page. Seriously. I get shudders just thinking about that crap.

Upgraded Account

The only thing that may throw people for a loop is the Store Code, which is required by google to organize your list of locations (and makes much more sense for a client with hundreds of locations). The store code can be anything, but Google recommends using something that represents your brand. For Bisnar Chase, I would consider something like “BC001” and “BC002”.

For more information take a look at the comprehensive list of updates!

Target Smarter, Not Harder

I’ve always been a little bit cynical about the concept of user personas. After learning about them I kind of crinkled my nose and figured that I didn’t need to come up with a list of personal details of the potential leads and converters for my website. After all, everyone is different and in marketing for a PI law firm, you kind of figure that age, gender, number of kids, and favorite ice cream has nothing to do with whether you get in a car accident or not. (If anyone makes any sexist and/or racist jokes here, you will be forever considered a douchebag.)

What are these Personas

If you’re not familiar with the concept of personas, the idea is to create profiles of multiple fictitious people who may have a reason to convert with your product or service. Looking at different personalities and motivations behind these personas will help you market to people more effectively and provide them with what they need, so they in turn will convert.
An example, since I can’t stand people who write about concepts without examples – You’re an electrician who wants more phone calls and more jobs, so you can finally buy that yacht you always dreamed of. You decide to create some personas to understand your customers more.

You come up with a few different types of people who might need electrical work. I’ll keep it short:
1. Stacy’s Mom: Single mom who needs a bathroom fan installed. Doesn’t have time to learn how to do it herself.
2. Manly Emanuel: Wants to be a macho man and fix everything in his house himself. Doesn’t need no professional. “DIY bro!”
3. Doctor Octavius: Wants to create a tritium reactor in his living room and doesn’t know how much power he can draw from an outlet.

The power of fake user information in the palm of my hands.

The power of fake user information in the palm of my hands.


These are very dumbed down persona profiles but we can use them for the purpose of the exercise.
To market to Stacy’s Mom, your CTA, your normal channels of marketing and SEO are your best bets here, as well as gently telling Stacy that she’s not the girl for you.
To market to Manly Emanuel, you have to consider that Emanuel is a strong, confident bearded man, who don’t need no electrician. BUT he’ll waste no time perusing your website if you put highly detailed and helpful tutorials on electrical installations and fixes. You may lose potential customers by teaching them how to do your work, but at the end of the day, most people who want a DIY solution will find it, and most people who don’t will call someone anyway. Your tutorial content is there as a support for your service, which Emanuel will contact after he burns his mustache off because he’s an idiot.
To market to Doc Ock, you make yourself available to answer questions that someone might hesitate or feel foolish asking questions about. Add a section on your website with a phone number that specifically allows people to ask questions about their situation to give them peace of mind. An electrician that makes themselves approachable and easy to contact in the name of “safety” will get more calls asking about the safety of tritium reactors, flickering lights, exposed wires, robot apocalypses, etc etc. Many of these won’t turn into conversions, but some might.

Ok that went on a little bit longer than I had hoped for as a (very) brief explanation of personas, but whatever ok cool. If you’re interested in learning more, ConversionXL has an interesting article that discusses personas created using real data, and studies of results from real events.

Lets Move Along (move along)

“But,” I complain, “You can’t do that sort of stuff with lawyers. Every client is different. All we can do is target for location and keywords.”

Fortunately, not with the advent of Facebook Ads. After creating campaigns for a few months, I’m still finding new ways to target my audience, and it really makes the concept of persona marketing come alive. Here are some insights that I’ve learned recently.

Know Your Audience

Because Facebook allows you to target such a tight group of viewers, you actually have an opportunity to use that persona data that you created just to “be a good marketer” and “complete the process properly.” For example, I just created an ad campaign targeting people whose loved ones may have been a victim of nursing home or elder abuse. My on-page analytics shows that people who visit my website’s nursing home pages tend to be older than 45, which I would assume would be the children of parents inside nursing homes. Therefore I’d obviously want to target above the age of 45 in my facebook ads. But remember to consider other options that Facebook provides you. With other PPC providers it’s impossible to choose by target by ethnicity, but Facebook offers the option to choose your target ethnicity. Unfortunately, it doesn’t allow for excluding a target ethnicity, which is really what we need in this situation.

ethnicity
According to this CDC report, at least three quarters of long-term care patients are ethnically non-hispanic whites, meaning that if we were only able to target a white population we may get more interest in our ads. As this isn’t possible, we may have to make do with limiting our target areas with a primarily white demographic.

The same report shows that nursing homes have a very high percentage of Alzheimer’s and Depression, which has also been connected to increased potential for abuse. We can use Facebook to target interests like “Alzheimer’s disease awareness.” Another especially relevant interest for us might be “Nursing Home Residents’ Rights.” If someone shows an interest in that, you can bet they have some stake in elder care somehow.

I'm a little upset that Mikey J. was not mentioned here.

I’m a little upset that Mikey J. was not mentioned here.

Choosing charitable donations to health causes may create a much smaller audience.

Note: Choosing charitable donations to health causes may create a much smaller audience.

Lastly, we can even narrow down behaviors to “Technology Late Adopters,” to target people who access facebook using older devices and operating systems.

Note: A cautionary word here – using behaviors to narrow down your target audience can have mixed results. A lot of the categories don’t include as many users as you’d expect since a lot of the data is provided by specific third parties and survey results. I’d advise creating 2 of the same ad groups and using only one to target your specific behavior. Then you can run your ads for a few days and see the results.

Lets go back to our electrician example. Pick an Ad Group to target toward Stacey’s Mom. Age: 30+. Women. Relationship Status: Single+Divorced+Separated. You can even choose different groups of Moms to target (Big-City Moms, Corporate Moms, New Moms, etc.) All of this data that we specify when we create personas can be targeted, as long as it is relevant to the kind of customers we are trying to attract.

Other Helpful Tips

city-data.com has been my friend throughout my targeting adventures. Organize cities by different census data – income, age, ethnicity, employment, education, families vs non-families, vacant homes, rent prices, marital status, cost of living, etc. Using all of this date, you can target specific areas that are more likely to have the type of people that you want to show your ad to.

Also, don’t neglect your website data. Assuming you’re using an analytics platform that tracks demographics, you can narrow down specifics of a type of visitor who hits your specific page. In doing so, you can find some interesting insights that you many not have known. For example, our electrician may have assumed a primarily male population to be reading his DIY tutorials and therefore may have targeted only men in any ads that he targeted toward Manly Emanuel, but it would be wise to double check that in your analytics platform before making any judgments. (It may also be useful to know that Facebook has a “recently moved” and “recent homebuyer” search behavior, which may be useful for an electrician.)

Lastly, make sure to get creative! There’s a hundred different ways you can target your audiences. Sometimes you can add multiple criteria to your custom audience, and sometimes these criteria will conflict with each other or make your audience too small, but make sure you’re thinking outside of the box! Most of the time an audience’s employer won’t matter to who you’re targeting, but they’ll have a huge return for class action lawsuits (my results were ~7% CTR for $0.14/click), or possibly if you’re a healthcare provider and you’re able to find out details of a large employer’s health insurance coverage you can offer services that you know their healthcare doesn’t provide. If specific employers don’t work for you, you can filter by job role in behaviors.
Whatever your situation, it’s highly likely that there is a great way to target for you. Travel companies are already targeting frequent travelers on Facebook, E-commerce shops are getting data from Loyalty Cards and retail stores that show who’s buying what products, and you know that our electrician friend would love to target those Manly Emmanuels who watch home improvement shows.

So get to it!

Site Speed Reporting in Analytics

My company has recently embarked on a quest to figure out what CDN will perform the best for our website. I did the normal speed tests from google and WebPageTest as well as looking over data from the network element loading timeline from the chrome developer tools window (or the ‘Net’ tab in firebug). I did however, want to track the averages of my page speed stats over time, which is why I turned to the Google Analytics Site Speed Report, and got this:
If you wanted to know, that spike to the right was 77 seconds. Cool.
This isn’t our primary website, but comparing the line graphs yields fairly similar results. You’ll notice that in the past 5 months, only 14 visitors had their site speed data recorded, which is not as useful for me as it could have been.

Kinda Stingy, eh Google?

Google Analytics out of the box only reports 1% of users’ site speed data, meaning that if you don’t have thousands of people coming to your website every day, you’re not going to get accurate insights from this report unless you change the way that GA reports the data. Fortunately, fixing this is a piece of cake.

If you’re using universal analytics, you’ll have a line in your tracking code that reads:

ga('create', 'UA-XXXX-Y', 'auto');

Just change this to

ga('create', 'UA-XXXX-Y', {'siteSpeedSampleRate': 100});

(Note: This will sample 100% of up to 10,000 daily visitors in your report. If you want to sample a lower percentage, just change the ‘100’ to a lower number.)

Now in the past 5 days, compared to the past 5 months, we have 25 pageviews with sampled data.
If anyone wanted to know what browser was the slowest, it was the Android Browser, followed by our trusty friend, IE10. Tsk Tsk Tsk.
Oooh. We should clean up this website load time. Too bad I don’t actually care about this one.

The reference page for Universal Analytics can be found here, and the reference for Classic Analytics can be found here.

Happy Sampling!

Hot Links!

grilled_sausagesEveryone loves themselves some good, juicy edu links. You know why? Because they’re delicious.
A few weeks ago I ventured into some unknown territory with some link building with scholarship offers, first inspired by Brendon Turner’s article on Search Engine News. If you don’t have a subscription, don’t worry. It’s super easy stuff. The steps to success are essentially:

  1. Start a Scholarship
  2. Give People Money
  3. Get Links
  4. Profit

Easy huh? Now it’s your turn!

Start a Scholarship
No but really, all we really did was create a quick scholarship page on our law firm’s website. Write how much you’re going to give, write the due date, write the rules and requirements, etc etc. See a pretty vanilla example here. If you’ll notice, the Dolman Law group’s 1.1k scholarship is immediately more enticing than those goons who thought 1k was enough… That hundred bucks can really make a difference. I’m only being like 80% sarcastic. (sorry guys. hey I gave you a link! be happy.)

Give People Money
Next, compile yourself a list of schools with outside scholarship pages. Google “outside OR External scholarship inurl:edu”. You may also want to include a “-inurl:pdf” in your search, since some schools list their outside scholarships on PDFs and those are usually more difficult to edit than normal pages, so your conversion rate with links may decrease.
You may want to add some other keywords in there to do with your specific educational disciplines but just remember the more the better.

Get Links
Most Universities will have an email that looks like finaid@****.edu – Just find that email on the financial aid section of their website and request that they add your link to their outside scholarships page. Many of them will do it without hesitation, and as an added bonus, the schools that are more prominent and famous are even more likely to have their ish together in the financial aid department, leading to almost immediate returns for popular schools.

Profit
You may have to follow up on a few schools before they’ll add your link, but for the most part your job will be fairly easy.

But Wait… There’s More!

She likes me for my body.

Try your Alma Mater first.

University websites can be hard to navigate when you’re looking for link opportunities, but remember that they care about anything that will make them look good and that will get them more exposure. Figure out what you can offer the university and pursue that as a method for getting links. Note – this will usually only work exclusively with a university you or your business have some connection to (eg. Your Alma Mater or a local college).

Different universities have different policies on linking out or even mentioning outside businesses, but if you poke around you may be able to find something that will get you in. If you have news or a story worth telling, most universities have an email address for their Media & Communications departments – usually PR@***.edu. Many schools have student experience pages or notable alumni pages where you can be featured, and Google will often pull carousel results for queries like this. You can even browse student blogs and build connections that may lead to links or guest posts (shut up Google, you can’t tell me what to do).

If you need a help figuring out the best way to get a link from a university website, I’d recommend running a screaming frog crawl and checking the external tab to see where the website is linking out to the most, and what pages those links are coming from. If you see a bunch of links that don’t go to government pages that are all acronyms (FAFSA, OSHA, PETA, DUMB, STUPD), check the linking page and see if you have a shot at working your way in there.

Any way you do it, getting yourself featured on a major university website won’t be easy. If you devote the time, however, it can be pretty rewarding. And if you finally get those hot links, please invite me over for dinner.

Keep your friends close, and your ad targets closer.

Here’s a quick and easy one for you. Most of us have seen that video review of Facebook’s ads – claiming that they filled a page with fake likes and thereby diluted the amount of real fans of a page that saw the page content. If you haven’t seen it – here you go.

While this video isn’t the end all be all source of insight on Facebook ads, and some people have written very useful clarifications on the problems that the video brings up – the basic message is something we know to be true: If you don’t make sure your ads are targeted to people who will see and respond to them, you’re going to be missing out.

Our Experience

My company has recently started putting a little bit of effort into Facebook Ads and though we’re only targeting cities in our surrounding area, I’ve noticed that about 1/6th of our likes are still from international sources – people that will not employ our (usually) localized services and sources that dilute the effectiveness of our targeting.

Facebook Likes by country

After having reading up on why this happens, I speculate that because we’ve used Facebook’s “Promoted This Post” feature, Facebook can show this page to any friends of any of our fans – many of whom I’m sure can be located outside the US. I have also been told that we’ve had people in other countries specifically like our page because their names were the same as the founding partner. Geez guys… come on.

The fix

The solution is hopefully one you’ve already employed. If not. this is one of the easiest ways to improve your targeting if you’re a local business. Your Facebook settings can allow you to only show your Facebook page to specific countries. Hence, fewer fake likes, more engaging audiences, etc.

Just go to your page general settings at the top of your Facebook page, click Country Restrictions, and add your country. Then select “Only show this Page to viewers in these countries.”
facebook country settings
Easy peasy, Mr. Freezy.

This isn’t going to eliminate all of your fake likes problems, or instantly improve your engagement with content – but it’s an easy start. Happy Facebooking!