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

Sunday, 26 October 2014

How to create your own author-centered knowledge graph

own author-oriented knowledge graph
I'm not a fear salesman, really! But the thought to name this article as "how to defend abusive content removal requests" comes to me from the reading of the Google's updated report on "How Google Fights Piracy". The following sentence makes me conceiving suspicion:
...sites with high numbers of removal notices may appear lower in search results.
On the background of all known Negative SEO cases this can be the next thing, where a honest publisher will be punished for nothing.

There are enough known cases, where content scraping sites get better SERP places as the unique content providers. And there are enough abusive content removal requests - just read the Google's report. The best defense is a good offence. We construct our publishing identities network, which serves as our own author-oriented knowledge graph. Its purposes are, that
  • always working removal requests at Google and DMCA takedowns,
  • lack of effect in case of abusive third part removal requests,
  • doubtless machine-readable relations between author's entity and author's creative work.
Our objective is a solid, structured and chained publisher identity, which will include the author, the publishing medium and the publication itself. Let's work!
Read full article »