web-dev-qa-db-fra.com

Traitement du fichier PDF par script de téléchargement et lien direct: contenu dupliqué?

J'ai un site Web qui héberge un document PDF (document mathématique). La page principale du site Web fournit un lien vers le document, qui est

http://example.com/download.php?file=Document.pdf  

Le script download.php sert à consigner les adresses IP qui téléchargent le document.

Maintenant, le document peut également être consulté/téléchargé en suivant le lien

http://example.com/Document.pdf

Cette configuration présente-t-elle des inconvénients du point de vue du référencement (duplicate content)? Et si oui, comment puis-je l'améliorer?

4
Leo

Oui, ceci est un contenu en double. Le même contenu est accessible à partir de deux URL différentes et il n'y a pas de canonisation.

En gros, cela signifie que les moteurs de recherche choisiront l'un ou l'autre de revenir dans les SERP. Le classement est essentiellement divisé entre les deux URL.

les deux URL sont utilisées pour la liaison.

Vous devez décider quelle est l'URL canonique/préférée et créer un lien uniquement vers cette URL.

Pour plus de simplicité, nous ne prendrons en compte que les deux URL que vous avez répertoriées. L'URL préférée semble être celle qui passe par votre script de téléchargement (c'est-à-dire download.php), sinon vous ne pourrez pas suivre les adresses IP des utilisateurs téléchargeant le fichier.

Pour résoudre les URL déjà indexées, vous pouvez rediriger en externe le lien direct vers votre script. En supposant qu'Apache, vous pouvez faire quelque chose comme ceci dans votre fichier racine .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+\.pdf)$ /download.php?file=$1 [R=302,L]

Cela redirigera une demande de /Document.pdf (uniquement s'il existe sous forme de fichier physique sur le système de fichiers) vers /download.php?file=Document.pdf.

$1 est une référence au premier groupe capturé dans le modèle RewriteRule (c'est-à-dire. ([^/]+\.pdf)).

Modifiez la redirection 302 (temporaire) en 301 (permanent) lorsque vous êtes sûr que tout fonctionne correctement. Les navigateurs 301 étant mis en cache par le navigateur, les tests peuvent donc poser problème.


Une URL plus "conviviale" (MISE À JOUR)

Vous pouvez aller plus loin et créer une URL plus "conviviale" comme /download/Document.pdf. Cela deviendrait alors l'URL canonique - l'URL vers laquelle vous créez un lien.

Dans ce cas, puisque vous avez un fichier dont le nom de base est également "télécharger" (c'est-à-dire. download.php vs /download), vous devez vous assurer que MultiViewsest désactivé. Sinon, mod_negotiation créera probablement une sous-demande interne pour download.php (en fonction de la demande) avant que nous ayons réécrit l'URL. Donc, au sommet de .htaccess:

Options -MultiViews

Toute demande directe de /Document.pdf ou /download.php?file=Document.pdf doit être redirigée en externe vers l'URL canonique. Par exemple:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+\.pdf)$ /download/$1 [R=301,L]

RewriteCond %{THE_REQUEST} GET\ /download\.php\ HTTP
RewriteCond %{QUERY_STRING} ^file=(.+\.pdf)$
RewriteRule ^download\.php$ /download/%1 [R=301,L]

%1 (comme opposé $1, mentionné ci-dessus) est une référence arrière au dernier RewriteCond CondPattern (c'est-à-dire. (.+\.pdf)).

La RewriteCond(condition) supplémentaire qui vérifie THE_REQUEST est nécessaire pour empêcher une boucle de redirection. (THE_REQUEST contient l'en-tête de la demande d'origine et ne change pas lorsque l'URL est réécrite.)

/download/Document.pdf serait alors réécrit en interne dans la "vraie" URL. c'est à dire. /download.php?file=Document.pdf. Une réécriture interne, comme il est suggéré, est interne au serveur. Il n'y a pas de requête HTTP externe. L'URL dans la barre d'adresse ne change pas. Il est complètement caché de l'utilisateur final.

RewriteRule ^download/([^/]+\.pdf)$ download.php?file=$1 [L]

Notez qu'il n'y a pas d'indicateur R(redirectname__) sur cette directive qui pourrait sinon déclencher une redirection externe.

Idéalement, vous devriez rendre la regex aussi restrictive que possible. Par exemple, dans la regex ci-dessus, .+ correspond à tous les caractères (1 ou plus). Cependant, si vos noms de fichiers sont composés uniquement de lettres majuscules et minuscules, il serait préférable de modifier l'expression régulière pour ne faire correspondre que les lettres. par exemple. [a-zA-Z]+.

5
MrWhite