Thursday, 6 November 2014

How to include the blog post description when you share on Facebook

This article shows how to make that the description is correctly shown when one of your blog-posts is shared on Facebook.




When you share one of your blog-posts using either the via the "what's on your mind" space on Facebook or the Facebook share button on your blog, you may find that the only information automatically shown is:
  • A picture (hopefully, but not always from the post)
  • The post title
  • The blog URL or the post URL

But many people want the post-description to be included too.

There are two things which you need to do to make sure that this happens correctly.


Step 1: Add search descriptions to your blog-posts

If a post does not have a description, Facebook will sometimes try to estimate one based on the contents. But this is not reliable, and it depends on the blog template you have used, and possibly even on other factors, eg at one stage, Facebook just looked for the the first
(paragraph) tag with at least 120 characters in it - which gave very odd results for some Blogger users. Alternatively it may try to use your post.summary but this also depends on your template.

A more reliable approach is for you to provide the description-text for each post.

For Blogger, the way to do this is described here.

For Wordpress, you need to to use an SEO plugin like SEO Ultimate to do this.

Step 2: Add Open-Graph tags to your template

Some templates already contain code which causes Facebook to estimate the description correctly. But some don't - and some may use two-step methods, eg relying on schema.org tags to imply Open Graph tags.

So, as with descriptions, it's more reliable to ensure you are using the set of tags that Facebook officially supports. These are the Open Graph tags.

You can see how to apply them in Blogger  or there are various plug-ins you can use on Wordpress.

Job Done! Once you have made these two changes, when someone shares your blog on Facebook, your own post-description should be shown. Don't forget to test your changes - as described in the Adding Open Graph tags to Blogger article.


What your readers see

Nothing! People who get to your blog using a web-browser, or who subscribe to your RSS feed or who follow-by email don't see anything different after you have done the steps above.

The only different is when they share a post from your blog in Facebook:  the initial description will come from your Description tag for the the post, not from the overall blog.


What happens for posts that do not have search descriptions

This depends on your blog's template, and on how Facebook is interpreting the information that it provides. You can see what Facebook will do for specific posts using the tag-debugging tool which Facebook provide.

Adding descriptions to old posts is tedious. But if your posts are often shared on Facebook, it may be worthwhile for you to allocate some time each day to edit a few posts LINK and update them with a current description. Provided you don't spend too long working out what the description should say, it should be possible to update 200 posts in a three weeks if you spend ten minutes each day doing just this.

What's more, it is possible that adding descriptions to your posts will make them look more attractive in regular Google search results too, which is A Good Thing if search-traffic matters for your blog.




Related Articles:

How to add a Description meta-tag to posts in Blogger

How to apply Facebook's OpenGraph labels in Blogger

Reasons why SEO and search-traffic don't matter for many blogs

Wednesday, 5 November 2014

Saturday, 1 November 2014

How to SEO long URLs

How to optimize long urls seo impact
There are many meanings about the SEO impact of long URLs: they are good, or bad, or have no influence. Our questions in this article are:
  • why long URLs occur,
  • how to make long URLs short,
The origins of long URLs are mainly
  • the wish to stuff URLs with keywords (both of domains and every single URL slugs),
  • the necessity (or, to be honest, the wish too) to reproduce the site's structure in the matching URL's structure.
Before we begin let us declare, what we mean as long URL: how many characters it must have to be named long? The longest URL in the Google's Webmaster Blog is 95 characters long, so let's call long URLs longer as this. Read full article »

Tuesday, 28 October 2014

Android Swipe Views with Tabs

In this post we are going to learn about how to integrate the android tab view with the fragments using ViewPager and ActionBar class. For displaying the tabs on the top of the screen you need to interact with the android action bar, this is because the tab views is connected with the action bar.
Ads by Google



In this example application we make three tabs called "java", "php" and ".Net" and there are three seperate fragement view for each of these tabs.

First you need to add the ViewPager into the activity_main.xml file.
 <android.support.v4.view.ViewPager  
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</android.support.v4.view.ViewPager>

Now create three layout files for the fragments.

1. java_layout.xml
 <?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#D881DA"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="58dp"
android:text="Welcome to java page"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

2. php_layout.xml
 <?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0B9AE2"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="97dp"
android:text="Welcome to php page"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>


3. dotnet_layout.xml
 <?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E2D40B"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="42dp"
android:text="Welcome to .Net page"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>


Now we need to inflate each of these layouts using the inflate() method.

1. JavaFragment.java
 package com.tabdemo;  
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class JavaFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.java_layout, container,false);
}
}

2.  PhpFragment.java
 package com.tabdemo;  
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class PhpFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.php_layout, container,false);
}
}


3. DotNetFragment.java
 package com.tabdemo;  
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class DotnetFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.dotnet_layout, container,false);
}
}


Now create an adapter class that extends FragmentPagerAdapter and define override method getItem. The getItem() method will return an object of fragment.

FragmentPageAdapter.java
 package com.tabdemo;  
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class FragmentPageAdapter extends FragmentPagerAdapter {
public FragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 0:
return new JavaFragment();
case 1:
return new PhpFragment();
case 2:
return new DotnetFragment();
default:
break;
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
}

MainActivity.java
 package com.tabdemo;  
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity implements ActionBar.TabListener{
ActionBar actionbar;
ViewPager viewpager;
FragmentPageAdapter ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = (ViewPager) findViewById(R.id.pager);
ft = new FragmentPageAdapter(getSupportFragmentManager());
actionbar = getActionBar();
viewpager.setAdapter(ft);
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionbar.addTab(actionbar.newTab().setText("Java").setTabListener(this));
actionbar.addTab(actionbar.newTab().setText("Php").setTabListener(this));
actionbar.addTab(actionbar.newTab().setText(".Net").setTabListener(this));
viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
actionbar.setSelectedNavigationItem(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}


Deciduous blog posts leave evergreens for dead

In a social-media world, deciduous blog posts have an enormous advantage of both ever-green and ephemeral content - find out what they are, and how to use them to best advantage.



Introducing deciduous blog posts

In botany and horticulture, deciduous plants
... are those that lose all of their leaves for part of the year. (Wikipedia)

In blogging, deciduous posts are ones that your readers lose all interest in at certain times - eg posts about Christmas carols during January, or winter gardening tips during spring.

Which sounds bad.

Until you realise that deciduous posts are also ones that your readers (both current and new ones) gain renewed interest in at certain times. That means it's quite reasonable for you - and everyone else  - to mention them on Facebook, Twitter, Google+ each time that the new "season" starts.   If your posts are good, you might even get more new visits from social media in the subsequent seasons than in the first time around.

When you think about it, it's easy to see that in a social-media world ...

Text superimposed on an ever-green pine forest, photographed from the air (aerial photo, not satellite)


Deciduous blog posts leave evergreens for dead.


What does this mean for bloggers

If getting more visitors through either search or referrals is important for your blog, then you should :
  • Be systematic about  how you remember to promote seasonal posts you've already published.   
  • Find ways to write posts that will be become popular on a cyclical basis.
  • Make strategic decisions about whether to change an existing post vs when to make a new post about a seasonal topic.
  • Set up Labels or custom-redirects to send people who end up on a previous-year post to the most recent one.


Remember to promote your seasonal posts

santa claus with a sack of toys on his back - the seasonal gift-giving symbol
Make a calendar of significant factors that should cause extra traffic for your blog, and send yourself a reminder message in time to review and re-share the relevant posts, according to your blog's social media strategy.

Working out exactly when do these promotions can be tricky. Ideally this is based on studying your visitor statistics (Analytics or whatever tool you use) to see when the posts got popular last time around.

You might think that you know anyway, because the seasons are obvious, but it's easy to miss earlier-than-expected surges in interest. For example, posts about Christmas music might actually be popular with music directors who're choosing their Christmas programs in September. But you do need to be careful about and where how you promote posts like this - because no one else wants to be reminded about Christmas so soon!

Finding seasonal posting reasons in non-seasonal blogs

Some blogs clearly have cyclic patterns: gardens follow the natural world, folk songs follow holidays (eg workers-rights songs for labor day, patriotic songs for national days), gift suggestions follow established human seasons (Christmas, Valentines), homeschoolers generally follow the school year.

But if you look harder, you can find seasonal patterns that apply to lots of other blogs, too. For example, one well-known blogger-helper often does a post towards the end of the American college year reminding people to transfer ownership of their blogs to a non-college Google account.

Ways to do this include:
  • Blogging about the similarities (or differences) between your niche and some unrelated by widely-known seasonal event  (eg "Writing poetry is not like Christmas because ...".
  • Writing about famous people in your topic who have died - close to their anniversary or birthday.   
  • Making up your own seasonal patter  eg   "In March, Crotchet-Blogger celebrates cable-stitch". 

Promotion existing posts vs publishing new ones

A big question for bloggers with deciduous blog topics is whether they should publish a new post each season, or just polish and promote the existing post(s).

The answer depends on the nature of the information each season:

SituationWhat do do
Are there changes to the information each season?

Make a new post, link to it from the last season's posts, promote it like you do any other post.

Does exactly the same information apply each year

Review the existing post, and then promote it on social media - and perhaps in the blog itself or in other new posts.


For example, one of my blogs is about public transport news in my city.  This has clear seasonal patterns around public holidays, the tourist season, a major sporting event, and the academic year.   The sporting event causes the biggest peak, with web-traffic up by 600%, week-on-week.  Each year's  information for it is very similar: buses leave at (roughly the same time) from (exactly the same place) for (close to the same fare) as last year. But each year there are changes: slightly different times, different effects on other bus services, one year there was a park-and-ride. So for this blog, I do a new post each year.   And I go back into last year's post and add a line like
"This information is for 2013.   Click here for this year's bus services."
and I make the "here" link to a label search for the topic, so that the most recent post will always come up first in the list.

By comparison, in another blog, I've published a printable sheet of non-religious Christmas carol words for which copyright has expired.  Over time, it will be possible to add extra carols to this.  But this won't happen each year - and all the existing content will continue to be relevant forever. So I don't republish this in a new post each year.   Instead, I promote it with a gadget on the sidebar, and I share the post on my social media accounts for the blog.

Be aware that if you do decided to make a slight change to an existing seasonal post, rather than write a new one:



Other things to think about

When you thinking about how you can get the more traffic using the deciduous posts in your blog, there are a few other factors to keep in mind:

Look for multi-year cycles

Some events happen once every 2, 3 or more years. For example:
  • Some sports events (the Olympics, the Volvo Ocean race, the Commonwealth games) happen every-so-many years. 
  •  Leap years happen once every four years.
  • In some countries, elections happen every five years.

These multi-year patterns can be even more powerful than the every-year ones, because less people are aware of them, and readers in general are not-so-likely to remember what you wrote four years ago.

Don't forget the Southern Hemisphere

Spring starts in September, not February, if you live in the bottom half of the world. And cars need to be prepared for winter in April, not November.

This may mean that you can re-promote posts based on natural seasons twice a year - or that you should target some seasonal posts by hemisphere.

Some readers have different holidays

festival of light decoration:  central candle circled by shells each with a small candle on it, with a yellow-woven backing cloth
It's easy to think that all your readers are just like you, and live with the same seasonal patterns that you do.   But that's not always true:
  • People who don't live in America might not even know when Thanksgiving or Black Friday is, much less what it means.
  • In many Western countries, Christmas is a holiday even for people who aren't religious. But there are countries where Christmas isn't a holiday at all and most people don't even know it exists.



How have you used seasonal / deciduous topics to get new interest in your blog?




Related Articles:

Mapping out your blog's social media strategy: how your blog works with your Facebook, Twitter, Pinterest, etc accounts

5 reasons why SEO doesn't matter for your blog

Using labels to categorise blog posts

Transferring a blog to a new owner

Follow-by-email, an easy way to offer email subscription to your blog