• User Attivo

    Errori 403 e 404

    Ciao a tutti, come sappiamo, gestire le pagine di errore 403 e 404 è cosa buona e giusta, quale è però il modo corretto per gestire un url non trovato? Di solito si mostra una pagina di errore personalizzata, se invece di mostrare un pagina di errore personalizzata, facessimo un redirect ad una pagina esistente del sito (ad esempio la Home), potrebbe portare qualche controindicazione o addirittura essere causa di possibile penalizzazione da parte di Google?


  • Moderatore

    Ciao artistic101,

    Di solito dipende dalla situazione, hai un caso specifico da analizzare?

    Ciao
    Enea


  • User Attivo

    @overclokk said:

    Ciao artistic101,

    Di solito dipende dalla situazione, hai un caso specifico da analizzare?

    Ciao
    Enea
    No, putroppo non ho casi specifici da analizzare ma mi piacerebbe intercettare gli errori 404 e 403 e, lato server, analizzare la pagina che era era stata richiesta e indirizzare l'utente verso la pagina più pertinente (in base a quella che era stata richiesta), nei casi in cui è impossibile capire quale fosse stata la richiesta, fare un redirect verso la Home.
    Mi chiedevo se questo possa essere utile oppure provocare qualche "casino". 🙂


  • Moderatore

    Io avevo provato una volta a fare dei redirect massivi degli url che facevano match con una data regular expression. Per esempio, tutti gli url che cominciavano per news2009 venivano ridiretti a home, con la conseguenza che anche le pagine inesistenti tipo news2009kjskhkhf risultavano esistenti e ridirette a home.

    Dopo un po' ho dovuto abbandonare il sistema perchè c'erano dei problemi proprio a livello di codice 404, in quanto google si accorgeva che certe pagine inesistenti non restituivano codice di errore e non gradiva. Non ricordo con precisione ma mi sembra che le segnalasse come errori soft.
    Secondo me fanno anche verifiche richiamando url di fantasia chiaramente inesistenti per accertarsi che le pagine non presenti restituiscano davvero il codice 404.

    Ciò non toglie, secondo me, che tu possa testare lato server la pagina richiesta e, verificato che non esiste, restituire la pagina più pertinente alla richiesta, l'importante è che ci sia anche il codice 404.

    A dire il vero non l'ho mai provato ma mi pare che non ci sia scritto da nessuna parte che la pagina d'errore 404 debba essere sempre la stessa per tutte le richieste.


  • User Attivo

    @gianrudi said:

    Ciò non toglie, secondo me, che tu possa testare lato server la pagina richiesta e, verificato che non esiste, restituire la pagina più pertinente alla richiesta, l'importante è che ci sia anche il codice 404.

    Ciao gianrudi, cosa intendi per "l'importante è che ci sia anche il codice 404"?


  • Moderatore

    Intendo dire che, in risposta alla richiesta di una pagina che non esiste, il server dovrebbe restituire un codice di risposta HTTP 404, che indica appunto pagina non trovata. Non 301 o altro codice, ma proprio 404.

    Il contenuto che si accompagna al codice 404 nella risposta, la cosiddetta pagina di errore, secondo me potrebbe anche essere diversificata in funzione dell'url richiesto. Di solito la pagina di errore 404 è una sola, si fornisce sempre quella per tutte le richieste di pagine inesistenti e anch'io ho sempre fatto così ma sono (quasi) sicuro che deve esserci la possibilità tecnica di restituire pagine d'errore diversificate in risposta a richieste diverse.

    Ti consiglio di leggere attentamente questa pagina della guida di google, dove si legge tra l'altro: *Oltre a restituire un codice 404 in risposta alla richiesta di una pagina che non esiste, il server visualizza anche una pagina 404 ... I contenuti della pagina non hanno alcun legame con la risposta HTTP restituita dal server.

    *Quello che serve a te, se non ho capito male, è poter restituire contenuti diversi in base alle diverse richieste di pagine inesistenti, ma dovresti farlo restituendo insieme il codice HTTP 404, e non attraverso un redirect, che restituisce il codice 301, altrimenti rischi di incorrere negli errori soft di cui alla pagina citata, com'era successo a me, e non è bello.

    EDIT: Una soluzione rapida che ho provato al volo e sembra funzionare potrebbe essere una pagina di errore dinamica (che in questo caso resterebbe una sola) con un test sull'url richiesto (in php sarebbe $_SERVER['REQUEST_URI']), che restituisce contenuti diversi (magari attraverso diversi include()) a seconda dell'url inesistente richiesto.


  • User Attivo

    Ciao gianrudi, deve esserci ancora qualcosa che mi sfugge, prendiamo ad esempio il caso di un errore 404, il webserver restituisce il codice 404 ma poi il controllo passa alla pagina di errore che non ha ovviamente negli header http il codice 404. Mi manca forse qualche passaggio?


  • Moderatore

    Per come la so io, la risposta del webserver include insieme status code e contenuto.
    Se la pagina richiesta è inesistente lo status code sarà 404 e il contenuto sarà quello della pagina definita come pagina di errore; se tale pagina è dinamica, il suo contenuto sarà un output che potrà variare in base ai test eseguiti.

    Naturalmente potrei anche sbagliare, però l'ho provato e come dicevo sembra funzionare. Puoi provarlo anche tu e verificare sui log del webserver.


  • User Attivo

    Ora non ho accesso ai log del webserver (nel caso in questione IIS), però vedo che è possibile fare questo tramite web.config:

    <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage.aspx" responseMode="ExecuteURL" />
    ```Analogamente si può fare per l'errore 403, quindi in teoria mi aspetto di essere rediretto verso la relativa ErrorPage con il corretto status code, diciamo che dovrebbe essere questa la corretta gestione. A questo punto sul codice lato server della ErrorePage posso intervenire facendo qualsiasi cosa. :)

  • Moderatore

    Sì era quella che intendevo parlando di "pagina definita come pagina di errore"
    In quella pagina puoi testare l'url inesistente richiesto e modulare l'output. Io l'ho provato in lighttpd+php e direi che funziona, suppongo che sia possibile anche in IIS.

    Per scrupolo controllerei sui log che il codice resti sempre 404 ma dovrebbe essere sicuramente così.


  • User Attivo

    Ottimo, stasera faccio qualche test approfondito, grazie! 🙂

    P.S. Uhm.. ho notato una cosa molto strana... tramite quel codice di cui sopra, quando vengono fatte richieste del tipo nomesito.it/testpaginainesistente vengo rediretto correttamente alla ErrorPage.

    Se invece metto anche l'estensione del file esempio: nomesito.it/testpaginainesistente.aspx mi trovo una pagina custom di iis con il classico: "HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. "

    Forse esistono tipi diversi di errore 404....? :mmm:


  • Moderatore

    @artistic101 said:

    Forse esistono tipi diversi di errore 404....? :mmm:
    No, questo lo escluderei.
    Probabilmente le pagine con quelle estensioni sono gestite dal webserver in modo specifico, e se non esistono fanno partire subito quella risposta invece della pagina di errore.

    Potrebbe forse essere risolvibile in sede di configurazione ma con IIS non saprei dire.