AdSense og ekte XHTML

Hvis du bruker en av XHTML-utgavene som anbefales servert med application/xhtml+xml, som for eksempel XHTML 1.0 strict eller XHTML 1.1, da vil du ikke uten videre kunne tilby Google AdSense-annonser på sidene dine. Men det finnes en løsning!

Problemet er at Google bruker Document.Write() til å lage en iframe for annonsene, og Document.Write() virker ikke i XML. Hvis du allerede serverer nettsidene dine med application/xhtml+xml så tar jeg det nesten som en selvfølge at du bruker content negotiation, slik at nettlesere som ikke takler application/xhtml+xml (kremt: Internet Explorer) i stedet blir servert text/html. Om du så gjør så finnes det en brukbar løsning på AdSense og application/xhtml+xml-problemet. Slik kan du få AdSense til å virke på nettsider servert med application/xhtml+xml:

Først lager du en separat nettside med MIME type text/html, den kan du kalle for object.php:

<?php header("Content-Type: text/html;charset=iso-8859-1"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="nb">
<head>
<title>Annonse</title>
<style type="text/css">
html, body {
margin:0;
padding:0;
border:0;
font-family:"Trebuchet MS", geneva, arial, sans-serif;
overflow:hidden;
}
</style>
</head>
<body>
Standard AdSense-JavaScript limes inn her.
</body>
</html>

Deretter setter du den inn i dine XHTML-sider som et <object>. Da skal vi bruke den eksisterende koden som du har i ditt content negotiation-skript til å avgjøre om det er nødvendig eller ikke, hvis variabelen er application/xhtml+xml så skal object.php bli inkludert i XHTML-dokumentet, hvis ikke så kan det vanlige AdSense-JavaScriptet kjøres. Slik ser koden ut hos meg:

<?php
if(stristr($_SERVER["HTTP_ACCEPT"], "application/xhtml+xml")) {
print "  <object data=\"object.php\" type=\"text/html\"></object>\n";
} else {
?>
Standard AdSense-JavaScript limes inn her.
<?php
}
?>

Resultatet blir altså at, for eksempel Internet Explorer, som allikevel ikke får noe annet enn text/html, får AdSense-JavaScriptet som allerede er i XHTML-dokumentet, mens moderne nettlesere som takler application/xhtml+xml får annonsene fra object.php satt inn med <object>.

Gratulerer, du kan nå tjene deg rik på nettanonnsering, og spise godt og leve lykkelig alle dine dager!

Dette innlegget ble postet i Søk- & markedsføring, Webutvikling. Bokmerk permalenka.

6 svar til AdSense og ekte XHTML

  1. Lennart sier:

    Flott :) dette var mer enn jeg visste om, og jeg koder utelukkende ved hjelp av xhtml.

  2. Asle Ommundsen sier:

    Vær oppmerksom på at dette kun gjelder hvis du serverer nettsidene dine med application/xhtml+xml, hvis du serverer dem med text/html til alle nettlesere, da kan du bruke Google AdSense-annonser uten å bruke denne teknikken.

  3. Lennart sier:

    Serverer utelukkende med application/xhtml/xml. Men jeg har ikke hatt problem med IE (tror jeg) til tross for dette.
    Jeg har dog "stjålet" Meta taggene fra en annen side for en stund siden, hvor jeg lurer på om følgende tagger kan ha noe påvirkning på IE:
    <meta name="MSSmartTagsPreventParsing" content="true" />
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
    Både sidene og Google ads vises og klikka blir registrert til tross for xhtml 1.1 og application/xhtml/xml.
    hmm… mye jeg ikke kan i denne verden :)

  4. Asle Ommundsen sier:

    Jeg sjekket akkurat nettsiden din og den serveres ikke som application/xhtml+xml, den blir servert som text/html. Det er derfor du ikke har problemer med AdSense-annonsene dine.

    Koden du henviser til gjør ingen nytte for seg, du må sette MIME type på serversiden, for eksempel med PHP eller .htaccess

  5. Lennart sier:

    hmm… jeg mente: lennart-fylling.com/glweb
    Men i følge Firefox har jeg text/html der også???
    Uansett, klippe og lime var ikke så lurt i kommentarboksen din. Her er taggene jeg skulle vise deg i forrige post:
    Meta name=MSSmartTagsPreventParsing content=true
    Meta-http-equiv=Content-Type name=application/xhtml/xml; charset=iso 8859-1
    I og med at DTD-en min er xhtml 1.1 og den skal serveres med ..xhtml+xml, så vet jeg ikke lenger :)
    Tror jeg går over til gamlemetoden min (php for å servere visse ting til IE)

  6. Asle Ommundsen sier:

    Jeg har rettet opp kommentaren din slik at koden vises nå. Men bruk funksjonen for forhåndsvisning, ting som ikke fungerer fjerner du før du poster. Takk.

    Som nevnt så må du sette MIME type på serversiden.