[Silverlight] Le référencement (SEO, Search Engine Optimization)
L’un des principaux arguments des entreprises pour ne pas faire de Silverlight est le problème de référencement.
Nous avons rencontré ce problème pour le site www.dotnet-france.com qui possède 90% de Silverlight.
Afin d’être bien positionné malgré tout, nous avons mis en place une solution utilisant le XSLT afin d’afficher dans la source de la page le texte contenu dans le Silverlight.
Prenons par exemple cette fenêtre Silverlight:
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock x:Name="MyText">Hello Word</TextBlock>
<Button x:Name="MyButton" Width="100" Height="100" Content="Test"/>
</Grid>
Cette application est hébergée sur une page ASP.NET avec une simple balise:
<asp:Silverlight ID="Silverlight1" runat="server"
Source="~/ClientBin/SEOSilverlight.xap"
MinimumVersion="3.0.40307.0" Width="100%"
Height="100%" />
Nous générons maintenant un fichier XSLT qui nous permettra d’extraire le texte du Silverlight pour l’afficher dans la source:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="msxsl:TextBlock">
<xsl:value-of select="@Text"/>
</xsl:template>
</xsl:stylesheet>
Ici on ne fait fonctionner notre XSLT qu’avec les textblock mais il est très simple de faire de même pour tout contrôle (Image, Button…)
On ajoute cette balise pour afficher seulement dans la source:
<div style="display:none">
<asp:Xml ID="XHTML" runat="server" TransformSource="converter.xslt"
DocumentSource="~/ClientBin/MainPage.xaml"/>
</div>
ou on peut imaginer une version HTML et utiliser comme ci-dessous:
<asp:Silverlight ID="Silverlight1" runat="server"
Source="~/ClientBin/SEOSilverlight.xap"
MinimumVersion="3.0.40307.0"
Width="100%" Height="100%">
<PluginNotInstalledTemplate>
<asp:Xml ID="Xml1" runat="server"
DocumentSource="~/ClientBin/MainPage.xaml"
TransformSource="converter.xslt"/>
</PluginNotInstalledTemplate>
</asp:Silverlight>
