• User

    ti ringrazio

    tu hai qualche suggerimento su come implementare questa funzionalità?

    io lo metterei nel file default.php del com_content del template


  • User

    che ne dici del codice di seguito

    
    
    $doc_data = $document->getHeadData(); 
    $url        = JURI::root(); 
    $sch        = parse_url($url, PHP_URL_SCHEME); 
    $server     = parse_url($url, PHP_URL_HOST); 
    $canonical  = $this->escape($_SERVER['REQUEST_URI']);
    $str_start = strpos($canonical, '?start');
    if($str_start!==FALSE) {
    $canonical = substr($canonical,0,$str_start);
    }
    $str_limit = strpos($canonical, '?limit');
    if($str_limit!==FALSE) {
    $canonical = substr($canonical,0,$str_limit);
    } 
    $newtag     = '<link rel="canonical" href="'.$sch.'://'.$server.$canonical.'"/>'  ;
    $replaced = false; 
    foreach ($doc_data['custom'] as $key=>$c) {    
     if (strpos($c, 'rel="canonical"')!==FALSE) {        
     $doc_data['custom'][$key] = $newtag;         
    $replaced = true;     
    } } 
    if (!$replaced) {     
    $doc_data['custom'][] = $newtag; }  
    $document->setHeadData($doc_data);
    
    

  • Moderatore

    Ciao,
    lo dovrei provare. Codice a parte, però, assicurati che non vada in conflitto con l'html generato da Joomla e da altre estensioni come il sef plugin.

    io lo metterei nel file default.php del com_content del template
    La cosa migliore è fare un plugin che ti faccia stampare l'html soltanto nelle pagine dove serve. Per la paginazione, ad esempio, abbiamo codice:

    • nel singolo articolo se o stesso si dispone su più pagine
    • nelle categorie per la paginazione degli articoli su più pagine (ne vengono mostrati un numero fisso per pagina)
    • nei vari componenti che gestiscono portfolio, contatti, ... se gli elementi si dispongono su più pagine

    Nulla vieta di inserire il codice php in un "file generico" a patto che il codice stampi l'html solo quando serve e, come già detto, che non vi siano altre estensioni e il core di Joomla a stampare codice dello stesso tipo (es. in modo da non avere due canonical).


  • User

    Grazie per il sempre pronto intervento

    un plugin sarebbe l'ideale così sarebbe disponibile per tutti

    io non ho molta esperienza utile a costruire un plug in

    se sei daccordo potremmo provarci

    o altrimeti testiamo il codice che ho postato sopra e lo miglioriamo

    ti ringrazio


  • Moderatore

    Di nulla. :smile5:


  • User

    ciao

    hai testo il codice?

    io l'ho provato ed inserisce il canonical giusto

    ma non toglie quello già creato

    una soluzione potrebbe essere la seguente

    
    // toglie il tag canonical
    $doc = JFactory::getDocument();
     foreach ( $doc->_links as $k => $array ) {
     if ( $array['relation'] == 'canonical' ) {
     unset($doc->_links[$k]);
     }
     }
    
    //inserisce il nuovo tag
    $document = JFactory::getDocument();
    $doc_data = $document->getHeadData(); 
    $url        = JURI::root(); 
    $sch        = parse_url($url, PHP_URL_SCHEME); 
    $server     = parse_url($url, PHP_URL_HOST); 
    $uri = JFactory::getURI();
    $absolute_url = $uri->toString();
    $canonical  = $this->escape($_SERVER['REQUEST_URI']);
    //$canonical  = $absolute_url;
    
    $str_start = strpos($canonical, '?start');
    if($str_start!==FALSE) {
    $canonical = substr($canonical,0,$str_start);
    }
    $str_limit = strpos($canonical, '?limit');
    if($str_limit!==FALSE) {
    $canonical = substr($canonical,0,$str_limit);
    } 
    $newtag     = '<link rel="canonical" href="'.$sch.'://'.$server.$canonical.'"/>'  ;
    
    //$newtag     = '<link rel="canonical" href="'.$canonical.'"/>'  ;
    $replaced = false; 
    foreach ($doc_data['custom'] as $key=>$c) {    
     if (strpos($c, 'rel="canonical"')!==FALSE) {        
     $doc_data['custom'][$key] = $newtag;         
    $replaced = true;     
    } } 
    if (!$replaced) {     
    $doc_data['custom'][] = $newtag; }  
    $document->setHeadData($doc_data);
    
    

    tu hai qualche altro suggerimento?


  • Moderatore

    Ciao, non ancora, provo direttamente questo nuovo. 😉


  • User

    Ciao

    sei iruscito a testarlo?

    poichè io ho un dubbio sul fatto che effeettivamnte lo crei ogni volta il canonical

    per il momentto ho inserio come workaround queste righe nel file robots

    block the pagination

    Disallow: /?limit=
    Disallow: /?start=

    le vorrei togliere ma devo prima trovare una valida alternativa al problema dei meta tag duplicati


  • User

    Ho testato un altro metodo forse più efficace

    bisogna modificare il file /plugins/system/sef/sef.php

    
    if ($uri !== $link)
            {
                       
                **$pag_1 = explode ("?start",$uri);
                $pag_2 = explode ("?limit",$uri);
                
                if($uri !== $pag_1[0]) {
                    $link = $pag_1[0];
                }
                
                if($uri !== $pag_2[0]) {
                    $link = $pag_2[0];
                }**
                
                $doc->addHeadLink(htmlspecialchars($link), 'canonical');
            }
    
    

    inserie le righe di codice in grassetto

    che ne pensi?


  • User

    Ciao

    hai testato?

    chiedo anche agli altri utenti del forum


  • Moderatore

    Ciao p_il_musicante,
    intanto perdona i tempi biblici.
    Rileggendo mi sono accorto di avere indicato la strada sbagliata in merito al rel=canonical con rel=next e rel=prev.

    La risposta si trova in questa pagina: support.google.com/webmasters/answer/1663744?hl=it
    Si legge:[INDENT=2]rel="next" e rel="prev" sono concetti ortogonali a rel="canonical". Puoi inserire entrambe le dichiarazioni. Ad esempio, http:// www . example.com/article?story=abc&page=2&sessionid=123 può contenere:
    <link rel="canonical" href="http: //www.example .com/article?story=abc&page=2"/>

    <link rel="prev" href="http:// www . example.com/article?story=abc&page=1&sessionid=123" />

    <link rel="next" href="http:// www . example.com/article?story=abc&page=3&sessionid=123" />[/INDENT]

    Ricapitolando, in caso di paginazione:

    • vanno usati rel=next e rel=prev

    • il rel=canonical può essere usato in due modi:

    • può puntare a una pagina che include tutto (es. articolo diviso in più pagine con versione completa: in questo caso Google suggerisce di scegliere come canonica la versione integrale)

    • può puntare alla pagina stessa

    Guida per implementare next e prev: http://www.giorgiotave.it/forum/joomla/216299-risolto-problema-paginazione-blog-joomla.html#post1108193

    Per il *canonical *il problema con le ultime release di Joomla! 3 non si pone perché è già previsto questo comportamento.

    Testa e facci sapere com'è andata. 😉


  • User

    Salve

    ritorno con un nuovo problema

    ho notato su web master tool che google ha trovato dei contenuti duplicati

    /it/ home. html ? catid=0 & id=4

    che mi restiruisce un'articolo del mio sito

    potreste aiutarmi
    come potrei risolvere?


  • Moderatore

    Ciao, puoi indicare i due urls?


  • User

    @FDA said:

    Ciao, puoi indicare i due urls?

    la prima è (quella corretta)

    w w w .miosito. com / it / categoria / sottocategoria / alias-articolo

    la seconda

    w w w .miosito. com / it / home. html ? catid=0 & id=4

    non ho capito come google abbia trovato la seconda


  • Moderatore

    Un url friendly può essere vista come la trasformazione di un url con parametri e quest'ultima è inevitabile. Potenzialmente di url con parametri in grado di generare contenuti dupicati ce ne sono a bizzeffe:

    
    miosito.com/it/?option=com_content&view=article&id=4:alias&catid=0&Itemid=50 // articolo:alias, categoria, menu
    miosito.com/it/?option=com_content&view=article&id=4:alias&catid=0 // articolo:alias, categoria
    miosito.com/it/?option=com_content&view=article&id=4:alias // articolo:alias
    miosito.com/it/?option=com_content&view=article&id=4 // articolo
    
    

    Per proteggersi da queste situazioni servono:

    • implementazione corretta dei menu
    • implementazione del rel canonical
    • prevenire link a questi url (per quanto possibile, ovviamente non puoi avere il controllo ma almeno non essere tu a inserirli).

    Il tuo è un caso particolare. Non avendo accesso al sito devo fare delle ipotesi:

    • homepage con alias home
    • url rewriting attivo
    • url con suffisso html

    Se le mie ipotesi sono giuste queste url conducono allo stesso contenuto:

    
    miosito.com/it/
    miosito.com/it/home.html
    miosito.com/it/?colore=rosaantico
    miosito.com/it/home.html?colore=verdepetrolio
    
    

    Domanda: i due url conducono alla homepage? Per condurre a categorie e articoli dovrebbe esserci il riferimento al componente (com_content).


  • User

    le tue ipotesi sono corrette

    io ho la seguente struttura

    più menù

    • menù principale dove ho tutte le voci delle varie categorie configurate in lingua italiano tranne la home che è per tutte le lingue ed ha l'alias home
    • ho un menù italiano con la sola voce home in lingua italiano ed alias home
    • poi ci sono dei footer menu che sono configurati come alias di voce di menù delle cateogrie del munù pricipale in lingua italiano

    la cosa strana è che le due url

    la prima è (quella corretta)

    w w w .miosito. com / it / categoria / sottocategoria / alias-articolo

    la seconda

    w w w .miosito. com / it / home. html ? catid=0 & id=4

    portano all'articolo

    ma la seconda rimane nella home e alla fine della home c'è l'articolo

    per il resto ho

      • url rewriting attivo
    • url senza suffisso html

    infatti se provo
    w w w .miosito. com / it / home. html ho la apginna errore 404

    invece se provo w w w .miosito. com / it / home mi va alla home
    e se provo w w w .miosito. com / it / ?cat=0 mi va alla home
    e se provo w w w .miosito. com / it? mi va alla home

    forse si deve configurare diversamente qualcosa?


  • User

    dovrei cambiare gli alias delle home?

    i menu configurati coem ho esposto sono nella forma corretta?
    riepilogo

    menu princiaple con la voce Home -> lingua -> tutte , alias -> home , altre voci categoria -> lingua IT
    menu italiano una sola voce Home -> lingua -> IT , alias -> home
    menu nel footer -> alias voce di menu delle voci del menu pricinpale -> lingua -> IT

    template predefinito per tutte le lingue

    moduli menu
    menu principiale -> puccliato su tutte le pagine -> lingua -> tutte
    menu italiano -> puccliato su tutte le pagine -> lingua -> IT
    footer menu -> puccliato su tutte le pagine -> lingua -> tutte

    è corretto come confgurazione?


  • Moderatore

    Il routing cerca innanzitutto l'articolo (id) e lo piazza nel contesto definito dagli altri segmenti dell'url, in questo caso nella home.
    Adesso stupisci: prova a digitare questo url e dimmi cosa succede:

    
    miosito.com/it/trallalerolla?cat=0&id=4
    
    

    Dovrebbe darti sempre l'articolo nel contesto della homepage, quindi qualcosa di simile all'url incriminato:

    
    miosito.com/it/home.html?cat=0&id=4
    
    

    Come avrai intuito a questo punto, il comportamento del router fa sì che allo stesso contenuto si pervenga anche con questo url:

    
    miosito.com/it/trallalerolla.html?cat=0&id=4
    
    

    Tutto questo però non è sufficiente a giustificare il problema. Come ho detto, se i menu sono corretti (attento agli alias e in generale a tutte le voci), non ci sono link sbagliati ed è implementato il rel canonical, allora questo problema di solito non si verifica.
    Però non ho capito dove ti è stato indicato in Search Console (miglioramenti html?)


  • User

    Si

    in miglioramenti html

    mi da meta description duplicate e title tag duplicati

    ho fatto i test che mi hai indicato e tutti mi riportano all'articolo nel contesto home

    i menù sono configurati come ho scritto nella risposta precedente

    riepilogo

    menu princiaple con la voce Home -> lingua -> tutte , alias -> home , altre voci categoria -> lingua IT
    menu italiano una sola voce Home -> lingua -> IT , alias -> home
    menu nel footer -> alias voce di menu delle voci del menu pricinpale -> lingua -> IT

    template predefinito per tutte le lingue

    moduli menu
    menu principiale -> pubblicato su tutte le pagine -> lingua -> tutte
    menu italiano -> pubblicato su tutte le pagine -> lingua -> IT
    footer menu -> pubblicato su tutte le pagine -> lingua -> tutte

    è corretto come confgurazione?


  • Moderatore

    Una diagnostica a distanza è difficile se non impossibile, non so dirti di più rispetto alle indicazioni generiche che coinvolgono il routing, gli url canonici e i menu creati. A questi si affiancano probabilmente aspetti legati al multilingua e ad eventuali istruzioni htaccess.
    Fai audit con un tool (http://seoblog.giorgiotave.it/seo/tools) e cerca eventuali link indesiderati come quello che ti indica Search Console.
    Aspettiamo i contributi di altri utenti che hanno affrontato problemi analoghi. :smile5: