La forma correcta de usar index.html

9

Tengo muchas cuestiones sobre las que me gustaría escuchar su opinión, así que espero poder explicarlo lo suficientemente bien. También debo tener en cuenta que estoy equipado para principiantes solo con el conocimiento de HTML y CSS, así que aunque estoy casi seguro de que hay una solución simple que usa PHP potente, no me ayudará .

Digamos que tengo mi blog personal en la dirección example.com/blog.htmly hay enlaces a varios sub-blogs example.com/blog/math.html, example.com/blog/coding.htmletc. Así que mi carpeta raíz contiene blog.htmly blogcarpeta, la blogcarpeta en sí contiene archivos math.htmly coding.html.

En primer lugar, aprendí (de Google Webmasters Tools ) que para fines estéticos y de SEO es bueno unificar example.com.comy example.com/index.htmlagregar _rel="canonical"_atributos a la fuente del index.html. Usando un par de otros trucos (como vincular ../y ./) me libré de lo feo que index.htmlaparece en mis direcciones web.

Y ahora me pregunto si este truco se puede usar no solo para la carpeta raíz sino para cualquier carpeta. Quiero decir, me movería blog.htmla la blogcarpeta, cambiaría el nombre index.htmly agregaría rel="canonical"para unificar example.com/blog/index.htmlcon example.com/blog/.
Este truco cambiaría la dirección de mi blog de example.com/blog.htmla example.com/blog/.

¡Sin terminar! También tengo problemas con el robot de Google que indexa mis carpetas. Entonces, cuando escribo site:example.com/en la búsqueda de Google, el enlace a mi carpeta example.com/blog/con archivos sin formato, iconos, etc. aparece entre los otros resultados. Supongo que también hay otras formas de solucionarlo, pero en mi humilde opinión, el cambio mencionado anteriormente también funcionaría: el index.html en la carpeta del blog evitaría que el usuario vea el contenido real de esa carpeta, solo aparecería el enlace correcto example.com/blog/en la búsqueda de google y (espero que) _rel="canonical"_haga que el segundo enlace example.com/blog/index.htmlno deseado no aparezca en los resultados de búsqueda.

Entonces mis preguntas son:

  1. ¿Es una buena práctica tener el index.htmlarchivo en cada subcarpeta o está destinado a estar solo en la carpeta raíz?
  2. ¿Existen desventajas o problemas que pueden ocurrir al usar el segundo método de " índice en cada carpeta "?
  3. ¿Cuál de las dos formas de estructurar el sitio web arriba indicadas se le prefiere?
Jeyekomon
fuente
Para mi aclaración, ¿los motores de búsqueda ven site.com/blog y site.com/blog/index.html como dos archivos distintos? Si se utilizan enlaces con ambas URL, ¿existe la posibilidad de que esté dividiendo la autoridad de página / jugo de enlace entre 2 ubicaciones?
Hasta donde yo sé, los motores de búsqueda (al menos Google) los ven como dos archivos distintos. Debido a que en realidad pueden ser distintos, los dos enlaces solo pueden diferir en una sola barra diagonal. (Lea más aquí .) Y sí, si está utilizando dos enlaces diferentes a una página, el rango completo de la página se divide entre esos dos enlaces y su página pierde efectivamente la mitad de su rango. Es por eso que sugiero la canonicalización del enlace mencionado para evitar esas fugas.
Jeyekomon

Respuestas:

13

La razón por la que usamos index.htmlo home.htmlo productos derivados de los mismos, se debe a que el software de servidor web en sí en realidad se ve por ello y lo sirve. Por ejemplo:

Esto NO ES VÁLIDO: (directorio www)

/var/www/
|_blog.html
|_blog/
  |_math.html
  |_page2.html
  |_page3.html
  |_(...)

De hecho, esto se servirá como una página que enumera las carpetas y archivos. (No es lo que quieres). Puede probar esta estructura, pero también hacer un archivo index.html junto a blog.html. Observe cómo no servirá blog.html a menos que especifique http://www.site.com/blog.html) Es por eso que http://www.google.com/muestra la página sin que tenga que especificarhttp://www.google.com/index.html

Esto es VÁLIDO:

/var/www/
|_index.html (renamed blog.html to index.html)
|_blog/
  |_math.html
  |_page2.html
  |_page3.html
  |_(...)

Esto servirá su blog.htmlarchivo COMO LA PÁGINA PRINCIPAL. (No enumere todas las carpetas / archivos en ese directorio)

El software del servidor web tiene (en la configuración) una lista especializada de nombres de archivos que se servirán como la página de inicio o la página principal de una carpeta. (En mi experiencia, index.htmltiene prioridad sobre index.php, por lo que si tiene index.htmly index.phpen una carpeta, index.html es lo que verá el público) Por supuesto, todo eso puede cambiarse e incluso puede configurarse blog.htmlpara ser reconocido como un "índice".

Dirigiendo su comentario:

"Este truco cambiaría la dirección de mi blog de www.xxx.com/blog.html a www.xxx.com/blog/".

Esto se haría moviéndolo blog.htmlcompletamente /blog/y renombrándolo a index.html.

Su nueva estructura sería:

/var/www/
|_blog/
  |_index.html (renamed from blog.html)
  |_math.html
  |_page2.html
  |_page3.html
  |_(...)

Esto debería servir correctamente http://www.site.com/blog/para mostrar el contenido de su blog.html al que le cambiamos el nombre para index.htmlque el software pueda configurarlo como el índice de su directorio/blog/

Ahora también es libre de colocar y index.htmlarchivar en la raíz de su sitio http://www.site.com/(index.html)para tener enlaces /blog/y cualquier otra cosa que desee.

Responde específicamente sus preguntas en declaraciones cortas:

  1. ¿Es una buena práctica tener el archivo index.html en cada subcarpeta o está destinado a estar solo en la carpeta raíz?

    Sí, porque evita que las personas vean qué archivos hay en sus directorios. Puede evitar esto con un .htaccessarchivo que contengaOptions -Indexes

  2. ¿Existen desventajas o problemas que pueden ocurrir al usar el segundo método de "índice en cada carpeta"?

    Ninguno que se me ocurra.

  3. ¿Cuál de las dos formas de estructurar el sitio web descrito anteriormente preferiría?

    Por lo general, tengo un archivo index.htmlo index.phpen la raíz, subcarpetas basadas en la categoría (como forumo newso loginetc.) y luego algún tipo de índice dentro de cada uno de ellos.

ionFish
fuente
¡Gracias por una respuesta tan completa! El acceso público a mis carpetas y el hecho de que estén indexados por Google me enoja bastante, así que ahora que sé que no hay ningún problema con el truco del "índice en cada carpeta", cambiaré mi sitio web de esta manera. Solo espero que el truco rel = "canonical" funcione y que todos esos índices no aparezcan en la búsqueda de google ...: D
Jeyekomon
6

El término técnico para index.html es Índice de directorio para Apache y Documento predeterminado para IIS. La otra directiva de Apache de interés es la directiva Opciones . Como se indica en la documentación, cuando Options Indexesse establece:

Si se solicita una URL que se asigna a un directorio y no hay DirectoryIndex (por ejemplo, index.html) en ese directorio, mod_autoindex devolverá una lista formateada del directorio.

Cuando configuro un sitio web que no utiliza un sistema de administración de contenido, mi configuración preferida es tener una página de contenido por directorio. Esa página es el índice del directorio (documento predeterminado) para el directorio. Todos los enlaces en el sitio solo enlazan al directorio y terminan con una barra inclinada (por ejemplo, en http://example.com/blog/lugar de http://example.com/blog/index.htmlo en ./blog/lugar de ./blog/index.html). La barra diagonal final es importante para evitar lo que comúnmente se conoce como redireccionamiento de cortesía . (Si se omite la barra diagonal final, todo aún se resuelve correctamente, pero el número de solicitudes HTTP y, por lo tanto, el ancho de banda aumentan).

Mi motivación principal para la metodología anterior es doble. Primero, facilita el cambio de la tecnología utilizada en el sitio web. Por ejemplo, puedo cambiar una página de index.html a index.php sin romper ningún enlace o listado de motores de búsqueda. Segundo, la extensión del archivo de una página de contenido es "ruido"; eliminar la extensión del archivo de la URL da como resultado URL más cortas y, con suerte, más legibles.

En cuanto a otros tipos de archivos:

  • Todos los archivos CSS residen en un directorio CSS en la raíz del sitio web.
  • Todos los archivos de imágenes residen en un directorio de imágenes o subdirectorio del mismo en la raíz del sitio web.
  • Todos los archivos JavaScript residen en un directorio de secuencias de comandos en la raíz del sitio web.
  • Todos los archivos flash y otras películas residen en un directorio de video o subdirectorio del mismo en la raíz del sitio web.

En un servidor Apache, desactivo Options Indexespara los directorios mencionados anteriormente. En los servidores Apache e IIS, no especifico un índice de directorio (documento predeterminado) para los directorios mencionados anteriormente. Por lo tanto, una solicitud para cualquiera de los directorios da como resultado un error HTTP 403.

Ryan Prechel
fuente
Debido a la restricción del límite de dos enlaces, no pude incluir enlaces al Índice del directorio y al Documento predeterminado en mi respuesta, así que aquí están.
Ryan Prechel