Migrating the Drupal way. Part II: saving those old URLs

Migration de la voie Drupal. Partie II: sauver ces vieilles URLs

Pour la deuxième partie de mon blog de migration, je tiens à aborder l'importance de maintenir les URL de votre ancien site et de montrer quelques exemples de la façon de les capturer dans Drupal. Le trafic des moteurs de recherche et d'autres références sont inestimables quand il s'agit de la réussite d'un site. J'ai géré des sites qui ont reçu plus de 100 000 références par jour à partir de Google seul.

Ce n'est même pas de mentionner tous les liens externes et des signets à vos pages. Si vous envisagez de migrer vers Drupal et n'avez pas considéré l'importance de maintenir les anciennes URL, vous devriez certainement. L'impact de la perte de cette quantité de trafic pourrait être catastrophique, mais heureusement la solution est raisonnablement simple.

Alors, Comment traitez-vous tous ces anciens liens? Vous pouvez les capturer avec un générique "page introuvable" message, mais cela est frustrant pour les utilisateurs et va inévitablement nuire à votre moteur de recherche classements. Heureusement, avec une petite quantité de configuration, vous pouvez toujours envoyer vos visiteurs au bon endroit dans votre nouveau site. Voici quelques options pour maintenir les URLs en utilisant le module mod_rewrite d'Apache et quelques modules de Drupal.

Obtenir les mises à jour

Recevez le meilleur contenu sur l'avenir du marketing, les changements de l'industrie, et d'autres leadership de la pensée.

Mappage d'un ID précédemment utilisé à un nid

Si vous êtes assez chanceux pour être en mesure de mapper un numéro d'identification précédemment utilisé à un nid Drupal, alors vous pouvez très facilement utiliser mod_rewrite pour remapper l'URL. Disons que l'ancienne URL ressemblait à http://example.com/index.asp? ID = 123 , mais votre nouveau site Drupal utilise une URL comme http://example.com/node/123 . Les règles suivantes peuvent être utilisées pour remapper l'ancienne URL à l'insu de l'utilisateur. Les exemples suivants seraient placés avantles règles de réécriture Drupal dans votre fichier .htaccess:

# Correspond à une demande d'index. asp RewriteCond% {REQUEST_URI} ^/index.asp $ # correspondent à une chaîne de requête comme ID = [un certain nombre] et capturent ce nombre RewriteCond% {QUERY_STRING} ^ ID = ([0-9] *) $ # réécrire une URL conviviale Drupal en utilisant le nombre capturé # note qui <x1> est un renvoi à partir d'un RewriteCond # où $1 est une référence à partir d'un RewriteRule RewriteRule ^. * $ index. php? q = noeud/<x2> [L]

Pour un match gourmand, vous pouvez laisser tomber le premier RewriteCond et il serait capturer toute URL qui se termine par "? ID = [un certain nombre]". La chose commode ici est qu'Apache n'a pas besoin de savoir quoi faire avec une extension de fichier ASP parce que ces URL sont réécrites en tant que demandes à index. php.

Je dois noter qu'il est en dehors de la portée de ce post pour expliquer comment créer de nouveaux nœuds avec un nid qui correspond à l'ID d'un élément importé de votre ancien site. Je vais garder ça pour un autre jour.

Mappage d'un nom de fichier numérique précédemment utilisé à un nid

Peut-être que votre ancien CMS crée des fichiers HTML statiques, mais utilise un ID prévisible dans le nom de fichier. L'exemple suivant permet de capturer des caractères numériques entre parenthèses et de les ajouter à index. php? q = node/. p. ex. demander file5. html retournerait le même contenu que node/5 .

# Mapper un nom de fichier avec un nombre prévisible à un nid Drupal RewriteRule ^ file ([0-9] *) \.html $ index. php? q = node/$ 1 [L]

Le site Web bytes ajouté a un vraiment commode mod_rewrite cheat sheet si vous voulez en savoir plus.

Création d'alias d'URL individuels dans Drupal

Creating individual URL aliases in Drupal

Dans certains cas, vous pourriez pas voulez utiliser mod_rewrite pour traiter ces URL. Il peut être trop de surcharge pour votre serveur, ou vous ne pouvez pas avoir un ID prévisible comme une référence.

En utilisant le module Path, qui vient avec Drupal Core, vous pouvez ajouter des alias pour les chemins d'accès système. Saisissez manuellement les alias en naviguant vers admin-> site Building-> alias URL-> Add. L'exemple suivant serait mapper votre ancienne URL 2008/12/12/My-SEO-page. html à l'URL Drupal node/5

Vous pouvez également ajouter ces alias lorsque vous modifiez chaque nœud sous la rubrique URL path Settings .

Une solution programmatique

L'exemple ci-dessus de l'utilisation du module Path est grande lorsque vous avez seulement une poignée de pages à alias. Mais considérez une migration qui a 250 000 pages à remapper. Si vous utilisez un script de migration, vous pouvez créer ces alias à la volée pendant le processus d'importation à l'aide de la fonction path_set_alias () de Drupal.

title = $Old _title; Etc. Ensuite, vous souhaitez créer une certaine logique pour reconstruire votre ancienne URL//example.com/2008/10/18/My-Old-URL.html--use: $Old _url = "2008/10/18/My-Old-URL.html"; Enregistrez le nœud dans la base de données node_save ($Node); Enregistrez le nouvel alias en fonction de votre ancienne URL si ($node-> nid) {path_set_alias ('node/'. $node-> nid, $Old _url, NULL,'fr'); } ?>

Redirection en tant que solution

Si vous voulez envoyer vos visiteurs à la bonne page et Utilisez vos nouvelles URLs de style Drupal, vous pouvez utiliser une redirection permanente. Le code d'état 301 HTTPindique à vos visiteurs que l'ancienne URL a une nouvelle maison permanente. Les moteurs de recherche devraient également respecter un 301 et l'index de manière appropriée. En utilisant le RewriteRules ci-dessus, vous pouvez accomplir ceci en utilisant les drapeaux [R = 301, L] , démontré ci-dessous:

# Correspond à une requête pour index. asp RewriteCond% {REQUEST_URI} ^/index.asp $ # correspondent à une chaîne de requête comme ID = [un certain nombre] et capturez ce nombre RewriteCond% {QUERY_STRING} ^ ID = ([0-9] *) $ # Redirect de façon permanente-note le? à la fin de l'adresse # qui est nécessaire de ne pas ajouter la requête d'origine chaîne RewriteRule ^. * $ http://example.com/node/<x1>? [R = 301, L]

L'exemple ci-dessus va rediriger l'utilisateur vers une URL comme /node/123 . Alors, que faire si vous voulez rediriger en permanence vers un alias URL plus amical? Une excellente option est d'utiliser le module Global Redirectpour Drupal.

La solution de module de redirection globale

Lorsque le module Path crée un alias, il ne supprime pas l'accès au chemin d'origine. Donc, /node/123 et /Your-Aliased-URL seront tous deux montrent le même contenu. Cela peut être un inconvénient pour votre moteur de recherche classement parce qu'ils froncent les sourcils sur le contenu en double. Le module global Redirect résout ce problème en créant une redirection 301 de /node/123 to /Your-Aliased-URL . Il n'y a pas de configuration nécessaire, il fonctionne automatiquement pour tous vos alias d'URL.

Ce module peut également être utilisé en conjonction avec les règles mod_rewrite. (la première série de règles mod_rewrite mentionnées dans ce post sont un bon exemple) Supposons que vous avez un alias URL comme /Your-Aliased-URL utilisé pour /node/123 . En utilisant mod_rewrite, vous pouvez mapper /index.asp? ID = 123 à /node/123 et global Redirect sera de façon permanente rediriger vers votre alias. Cela envoie effectivement toutes les demandes de /index.asp? ID = 123 à /Your-Aliased-URL .

Comme vous pouvez le voir, il existe de nombreuses options pour capturer vos anciennes URL. Quelle que soit la solution que vous choisissez, assurez-vous que les gens qui viennent sur votre site voient ce qu'ils attendent.

Avec un peu de planification, une migration ne découragera pas vos visiteurs et vous ne ferez pas de mal à votre relation précieuse avec les moteurs de recherche.