seoLink in Flex

September 15th, 2009

Hello,

In the past days I worked on the so-called seoLink project for Flex. It’s a more deep aproach of Google Friendly Flex applications (discussed here: http://blog.ag-prime.com/2009/06/permanent-links-in-flex-and-track-them-with-google-analytics/).

Well the main idea is to create a common XML file that stores actual content. Then this XML file is parsed by the Flex application and by an PHP file too.

Using .htaccess I redirect all incoming requests to index.php?p=<request>

So, inside the .php file, I dispach this path parameter and load the equivalent information from XML file.

The resulting html will have the SWF loader for Flex (with flashvars = p=<request>) and alternate content selected from XML. So both alternate text and actual Flex content will be according to the <request> set to the browser.

You can view full source just by right click and view source here: http://seolink.ag-prime.com/

I’ll soon come with updates.

Later update: Lynx view

[15.09.2009 21:20] Yes, we are getting there. The first results in google just arived: http://www.google.com/search?q=site:seolink.ag-prime.com

Also, how it look on Google Analytics. It tracks pageviews, landing pages…

Variante de a folosi Google URL Builder cu Google Analytics

July 11th, 2009

Google URL Builder este un excelent instrument de urmărire, analiză şi, în final, de îmbunătăţire a calităţii traficului pe site. Prin adăugarea unei simple bucăţi de string la orice adresă URL care utilizează acest instrument, Google Analytics poate distinge în special link-ul, evidenţiindu-l ca sursă a traficului şi raportându-i calitatea prin bounce rate, interacţiunea cu utilizatorul şi tranzacţiile de comerţ electronic.

Mai jos voi prezenta câteva variante de a folosi Google URL Builder, instrument care facilitează urmărirea conversiei campaniilor de marketing online:

  1. Etichetează traficul Google Base: Google base este un serviciu Google gratuit care ajută proprietarii de magazine online să îşi publice produsele sau serviciile în Google base sau alte proprietăţi Google fără nici un cost. Etichetează fiecare URL înainte de a le folosi. Acum, sub sursa traficului în Google Analytics vei putea vedea sursa traficului din Google base, bounce rate-ul acestuia, conversia etc.
    Link-ul va arata astfel: http://www.exemple.com/produs.html?utm_source=Google%2Bbase&utm_medium=ad&utm_content=nume%2Bprodus&utm_campaign=Cel%2Bmai%20ieftin%20produs

    Google base campaign

    Google base campaign

  2. Etichetează traficul din emailuri si newsletter: Analizează şi înţelege click through rate-ul, rata de conversie şi multe altele cu ajutorul Google Analytics prin etichetarea link-urilor folosite in email-uri şi newsletter .
    Link-ul va arata astfel: http://www.exemple.com/produs.html?utm_source=Newsletter4&utm_medium=email&utm_content=nume%2Bprodus&utm_campaign=Cel%2Bmai%20ieftin%20produs

    Newsletter campaign

    Newsletter campaign

  3. Etichetează traficul de pe reţele sociale: Înainte de a scurta URL-ul prin diverse servicii de scurtare a URL-ului (tinyurl.com, sp2.ro) etichetează URL-ul pentru a putea urmări traficul venit de pe diferite reţele sociale precum twitter.
    Link-ul va arata astfel: http://www.exemple.com/?utm_source=twitter&utm_medium=twit&utm_content=Varianta%2Bengleza&utm_campaign=Lansare%2Bvarianta%20engleza

    Google URL Builder for twitter

    Google URL Builder for twitter

  4. Etichetează banner-ul extern de afişare campanii: Veţi avea nevoie de etichetarea prin Google URL builder a campaniei pentru a obţine o mai bună imagine de conversie şi de interacţiune cu utilizatorul.
    Link-ul va arata astfel: http://www.exemple.com/produs.html?utm_source=zf&utm_medium=banner&utm_content=Te%2Bduce%20la%20mare&utm_campaign=Banner%2B-%20La%20mare

    Banner campaign

    Banner campaign

  5. Etichetează status-urile de la messenger: Statusul de messenger este o alta modalitate de a-ti promova afacerea, de aceea fiecare link din cardul statusurilor trebuie construit cu ajutorul Google URL Builder pentru a putea urmari traficul care a fost generat de catre link-urile postate in aceste statusuri.
    Link-ul va arata astfel: http://www.exemple.com/produs.html?utm_source=yahoo%2Bmesenger&utm_medium=status&utm_content=Te%2Bduce%20la%20mare&utm_campaign=Status-%2BTe%20duce%20la%20mare

    Messenger campaign

    Messenger campaign

Dar ceea ce aş dori să menţionez este faptul că această unealtă nu este indicat să o folosiţi pentru a eticheta link-uri interne deoarece poate cauza mari probleme în folosirea Analytics-ului. GA devine confuz când actualizezi campania “cookie” în timpul unei vizite.

Dacă aveţi nevoie să urmăriţi campanii interne ar trebui să utilizaţi event tracking sau virtual pageviews, dar nu campanie de urmărire.

Permanent links in Flex and track them with Google Analytics

June 30th, 2009

The purpose of this tutorial is to recreate the browsing experience similar to HTML, so you can save / share links and track clicks through sections of your site.

I first created a very simple application, having 3 sections: Home, Events and Contact:

The directory structure

The application is organized in Views using ViewStack

CODE:

<mx:ViewStack id=”views” horizontalCenter=”0″ verticalCenter=”0″>

<views:home id=”home” label=”Home” showEffect=”{fadeIn}” hideEffect=”{fadeOut}” />

<views:events id=”events” label=”Events” showEffect=”{fadeIn}” hideEffect=”{fadeOut}” />

<views:contact id=”contact” label=”Contact” showEffect=”{fadeIn}” hideEffect=”{fadeOut}” />

</mx:ViewStack>

Every  view being placed in com/views/* , and all are components having the same structure:

CODE:

<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>

<mx:VBox>

<mx:Label text=”Home page” />

<mx:TextArea htmlText=”Lorem ipsum”

editable=”false” borderThickness=”0″ condenseWhite=”true” backgroundAlpha=”0″ focusRoundedCorners=”0″ focusThickness=”0″

verticalScrollPolicy=”auto” horizontalScrollPolicy=”off”/>

</mx:VBox>

</mx:Canvas>

For menu display I used the very intuitive LinkBar that extracts labels from views inside ViewStack (great!)

CODE:

<mx:LinkBar dataProvider=”views” top=”10″ horizontalCenter=”0″/>

And that’s it for our simple application setup.

Preview what we have so far:

Ok it all works ok now, but we want, to send somebody directly to our events page. Simple! For that we will have to use the BrowserManager so we can add trailing variables to our page link. They will be pairs variable=value after a # character.

The steps are very simple, when we first load our application we check the variables, if any, at the end of our url and load the specified view. And during our application is running we update the url every time we change views, and update views every time we spot a url change (so we can also handle the browser’s back button).

Note! This makes use of the history.js script, make sure it’s included in your index.template.html file.

CODE:

<mx:Script>

<![CDATA[

// browser

import mx.events.BrowserChangeEvent;

import mx.managers.IBrowserManager;

import mx.managers.BrowserManager;

import mx.utils.URLUtil;

private var bm:IBrowserManager

protected function init() : void {

//get an instance of the browser manager

bm = BrowserManager.getInstance();

//initialize the browser manager

bm.init();

//set initial values based on url parameters

updateContent();

//add event listeners to handle back/forward browser buttons

bm.addEventListener( BrowserChangeEvent.BROWSER_URL_CHANGE,onURLChange );

}

private function updateContent():void

{

//convert url parameters to an actionscript object

var o:Object = URLUtil.stringToObject(bm.fragment);

//set the selected view

var p : String = (o.p != null)?o.p:"home";

Application.application.views.selectedChild = getViewsChildById(p);

}

private function onURLChange( event : BrowserChangeEvent ):void

{

//call update values based on change url

updateContent();

}

public function updateURL():void

{

//update URL fragment

var page : String = Application.application.views.selectedChild.toString().split(".").pop().toString();

bm.setFragment( "p=" + page );

}

private static function getViewsChildById(str : String):Object {

for each (var child : Object in Application.application.views.getChildren()) {

if (child.id == str) {

return child;

}

}

return null;

}

]]>

</mx:Script>

We store a browser manager instance into out IBrowserManager variable. Upon applicationComplete event we launch init(), initializing the browser manager, updating to selected view, and hooking a BROWSER_URL_CHANGE event to update views every time a url is change or browser’s Back, Forward button is pressed.

The pairs stored at the end of the url can be extracted from BrowserManager’s .fragment value. For example, I used the variable p to store the view name. So, for example the events view will have a link like http://localhost/…/permaLink.html#p=events

Since the value from fragment  is a string, I also created a helper function that extracts the view child by specifying it’s name getViewsChildById(str:String) that returns the object representing that view.

Next step is to put a handler on ViewStack change event , change=”updateURL()” so we will update the browser’s url every time a view is changed inside our application.

The updateUrl() simply reads the current ViewStack selectedChild and updates BrowserManager’s fragment variable.

CODE:

var page : String = Application.application.views.selectedChild.toString().split(“.”).pop().toString();

bm.setFragment( “p=” + page );

That’s it. Simple, right? Now when we click on events our url will like this:

Preview (note the p=value pair at the ending of your url)

Now our next task is to track this clicks with Google Analytics. Practically our Flex application behaves now like a Ajax application. So we just have to include our Google Analytics code in the <head> tag of our output html.

You can do this by modifying the html-template/index.template.html file.

CODE:

<head>

<script type=”text/javascript”>

var gaJsHost = ((“https:” == document.location.protocol) ? “https://ssl.” : “http://www.”);

document.write(unescape(“%3Cscript src=’” + gaJsHost + “google-analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));

</script>

<script type=”text/javascript”>

try {

var pageTracker = _gat._getTracker(“put your tracker ID here”);

pageTracker._trackPageview();

} catch(err) {}

</script>

</head>

And when we update the url’s we should tell Google Analytics that we changed that page. For this purpose we have the function pageTracker._trackPageview(pageName).

So we will simply add a call to this Javascript function, using the Flex’s ExternalInterface.call , in the updateUrl function:

CODE:

ExternalInterface.call(‘pageTracker._trackPageview’,‘#’+bm.fragment);

So now we can share permanent links to views of our applications, we can track landing / exit pages, all trafic statistics with Google Analytics.

Thank you.

You can view the application in action here.

You can download sources here: permalink

Google indexes external loaded data in SWF files

June 25th, 2009

Hello, recently, Google announced support for dinamicly generated SWF content (aka. Flash and / or Flex).

So, from now onw, every SWF file in your website will be indexed, and appear on Google’s search results.

Read more about tracking your Flex website and friendly url’s here.

Read more about Google indexing content from external resources in Flash / Flex here.

Note! There will be still a issue with this, by now they can only index sites scripted with AS1 and AS2, so not your Flex application.

6 Metode de a obtine followeri relevanti pentru afacerea ta pe Twitter

March 24th, 2009

Foarte multi au inteles gresit partea asta la Twitter crezand ca avand foarte multi followeri si urmarind foarte multi utilizatori va conta foarte mult pentru business. Insa s-au inselat. Ceea ce conteaza pentru afacerea ta este relevanta twitter-ilor care te urmaresc, faptul ca pe cei care te urmaresc ii intereseaza ceea ce scrii si ai sanse mari sa primesti si un feedback de la ei. La urma urmei nu are nici un rost sa scrii pentru cineva care nu e interesat de subiectele pe care le abordezi.

  1. Primul si cel mai important lucru este sa nu faci spam de pe contul tau de Twitter. Mesajele banale precum “Salut, ce mai faci?” nu trebuie folosite pentru cei care te urmaresc. Nu incerca sa le fortezi mana impingandu-i sa cumpere produse cu mesaje de genul: “daca vei cumpara acest produs vei primi altul gratis”.
  2. Foloseste optiunea da cautare pe care Twitter o pune la dispozitie pentru a putea urmari oameni care au aceleasi idei, preocupari, pasiuni ca si tine. Cauta la profilul utilizatorilor interesele pe care le au si vezi daca se potrivesc cu interesele tale sau ale companiei tale, si urmareste-i. Urmareste-i pe cei care crezi ca vor avea un avantaj daca te vor urmari si ei pe tine.
  3. Pe langa faptul ca trebuie sa-i urmaresti pe cei relevanti pentru tine trebuie sa ramai si tu relevant pentru cei care te urmaresc pentru a-ti putea creste followerii si organic. Nu urmari foarte multi utilizatori ca poti uita sa adaugi si tu continut relevant.
  4. Tine o evidenta daca cei pe care ii urmaresti te urmaresc si ei sau nu. Daca sunt utilizatori care nu te urmaresc de ceva timp scoate-i din lista ta si da-le iar Follow asta le va aminti de tine si poate sa iti mai dea inca o sansa ca el sa te urmareasca. Poti sa faci acest lucru cu cei pe care ii consideri ca fiind foarte importanti pentru tine.
  5. Impartaseste continut relevand si de calitate pentru industria in care activezi. Si ai grija sa nu te gandesti doar la interesele tale ci si la interesele celor care te urmaresc
  6. Daca firma ta are mai multe interese diferite creeaza conturi diferite de Twitter pentru fiecare din acele interese pentru a putea avea continut relevant pentru fiecare si bineinteles utilizatori interesati pentru fiecare din aceste ramuri.

Permission marketing

December 15th, 2008

Este psihic imposibil pentru noi toti sa fim atenti la tot ce se asteapta marketerii sa fim: cele 17.000 de produse noi introduse in magazine anul trecut, sau reclamele in valoare de 1000 de euro directionate catre tine anul trecut.

E de mirare ca multi dintre consumatori au impresia ca lumea care se misca rapid in jurul lor incepe sa apara in ceata? Este televiziune in aeroport, reclame in toalete, newslattere si un telefon mobil oriunde te duci.

Mediul devine din ce in ce mai ostil iar criza economica ii amplifica mai mult ostilitatea si de aceea este nevoie de o schimbare si in mediul de marketing deoarece asha cum o spun si cei de la Business Magazin “in aceste conditii, cuvantul de ordine este prudenta”.

Astfel cei mai inteligenti dintre marketeri au descoperit ca vechile metode de a vinde produse nu mai da rezultate asa cum dadea si au cautat indelung o alta solutie. Permisiion marketing este un mod fundamental diferit de gandire asupra publicitatii si consumatorilor.

Marketingul care se facea pana acum (si inca se va mai face) este asha numitul Interruption Marketing, deoarece cheia fiecarui add este sa intrerupa ceea ce privitorii faceau pana atunci pentru a-i face sa se gandeasca la altceva.

Foarte multi dintre noi au foarte multe de facut si foarte putin timp la dispozitie si in fiecare zi suntem expusi la mai mult de 4 ore de media si toate sunt optimizate sa te intrerupa iar marketerii se straduiesc sa ne intrerupa din ce in ce mai mult. Si pe langa toate acestea deoarece internetul este un mediu exceptional pentru dezvoltarea marketingului direct, costurile expedierii de mailuri este infim astfel ca zi de zi ne trezim bombardati cu zeci de spamuri.

Aici intra permission marketingul in scena si face diferenta. Unde? In ceea ce se intampla dupa intrerupere: cererea permisiuni si mai apoi starnirea curiozitatii ” Permite-mi sa-ti adresez o intrebare. Ai vrut vre-odata sa iti maresti fidelitatea clientilor tai crescandu-ti astfel si profiturile?”

“Coltar de bucatarie” – keyword-ul minune!

December 14th, 2008

De curand am inceput o campanie de optimizare SEO si atat de structura cat si de continut pentru un producator de mobila din Jud. Suceava.

Site-ul este www.tarraplast.ro si are in index-ul google.ro aproximativ 140 de pagini.

Dupa scurt timp de la optimizare au inceput sa se genereze si vizitele. Un cuvant cheie foarte puternic, care genereaza de mai bine de o luna o buna parte din vizite si totodata si vanzari pentru client, este uimitor, un singur produs din site, Coltar de Bucatarie. Vedeti aici pe ce pozitie se situeaza www.tarraplast.ro la cautarea dupa acest cuvant cheie, practic este primul rezultat al unei companii pe aceste cuvinte. De asemeni aceeasi situatie se intalneste si la cuvinte cheie precum mobila falticeni sau magazine mobila suceava. In toate aceste rezultate este primul site de companie.

Promovare pentru motoare de cautare

December 11th, 2008

Majoritatea oamenilor au cunostinte limitate cand vine vorba de pozitionare pe motoare de cautare si de varietatea serviciilor din acest domeniu. Cu totii stim insa ca aflandu-ne pe una din primele 10 locuri in unul din cele mai importante motoare de cautare iti poate aduce atat trafic cat poti duce. Dar cum putem ajunge pe unul din cele 10 locuri?

Foarte important este ca site-ul sa fie optimizat pentru motoarele de cautare, iar pasii de baza ai optimizarii sunt:

  • analizarea concurentei
  • alegerea unui nume domeniu potrivit
  • alegerea unui server fiabil si rapid pentru gazduire
  • optimizarea codului sursa
  • validare HTML,CSS
  • creare harta site
  • optimizarea marimii si a timpului de incarcare
  • design prietenos (user friendly)
  • optimizare link-uri interne
  • optimizare link-uti externe
  • optimizarea meta tagurilor
  • stabilirea cuvintelor cheie pentru care va fi optimizat site-ul
  • realizarea continutului astfel incat sa contina un numar optim de cuvinte cheie
  • inscrierea in motoare de cautare
  • inscrierea in directoare
  • campanii online (Google Adwords)
  • analiza rezultatelor
  • mentinerea pozitiei