• User

    Grazie FDA

    per le url legate agli id dell'articolo
    tu hai già sviluppato qualche soluzione?

    riotrnado invece al caso delle category e subcategory
    le potresti risolvere con dei redirect 301?

    che suggerisci altrimenti?


  • Moderatore

    Non è facile sviluppare soluzioni che possano essere generalizzate su tutti i siti e che quindi siano compatibili con altre estensioni. Questa a mio parere è una delle cause che spinge gli sviluppatori a non pubblicare le estensioni fatte in casa, che magari invece funzionano su singoli siti.

    per le url legate agli id dell'articolo tu hai già sviluppato qualche soluzione?
    La risposta secca è: no, non ho soluzioni. Ho risolto su diversi siti il problema scrivendomi un plugin, ma nulla che sia generalizzato e che si possa esportare, perché sarebbe sufficiente l'installazione di un'estensione seo/sef per mandare il sito a gambe all'aria.
    Come ho già detto altre volte, secondo me serve un'estensione seo/sef che faccia tutto e che diventi un punto di riferimento come Yoast per WP, cosa che secondo me per Joomla al momento non esiste.

    riotrnado invece al caso delle category e subcategory le potresti risolvere con dei redirect 301?
    Qui andrebbe capito bene cosa accade sul sito in questione, perché dai post sopra si possono ipotizzare cose diverse.
    Alcuni problemi si verificano a causa della creazione di menu diversi e di opzioni particolari, quindi sono indotti dal webmaster. Se ad esempio la categoria/il menu per it/category/subcategory prevede un unico articolo e questo viene mostrato integralmente, allora per l'effetto di altre opzioni è chiaro che le seguenti url potrebbero mostrare lo stesso contenuto:

    • it/category/subcategory
      it/category/subcategory/myarticle*

    Diverso è il caso di:

    • it/category/subcategory/myarticle
      it/subcategory/myarticle*
      che andrebbe invece analizzato a livello di menu. Per queste sarei curioso di vedere le url e i menu esistenti. Il mio consiglio è di analizzare il sito e cercare di capire perché si presentano, in modo da prevenire invece di curare. Il dubbio sui "menu diversi" mi è venuto leggendoti:

    puntanto rispettivamente alle pagine raggiugibili da link differenti
    Verifica quindi se esistono e se puoi eliminare menu che sono fonte di url sbagliate. 🙂


  • User

    Ho risolto su diversi siti il problema scrivendomi un plugin

    sarebbe possibile testare questo plug in per verificare se nel mio caso potesse risolvere la questione degli id nelle url?

    Se ad esempio la categoria/il menu per it/category/subcategory prevede un unico articolo e questo viene mostrato integralmente, allora per l'effetto di altre opzioni è chiaro che le seguenti url potrebbero mostrare lo stesso contenuto:

    • it/category/subcategory
      it/category/subcategory/myarticle*

    questo caso lo escluderei poichè nelle pagine catogria si visulizza solo l'immagine introduttiva, titolo e sotttotitolo di un articolo

    Il dubbio sui "menu diversi" mi è venuto leggendoti:

    nel mio caso ho l'Head menù ed il footer menù

    dove le sotto categorie sono organizzate come colonne del footer menù e quindi direttamente raggiungibili e non coem nell'HEAD menu da una categoria principale e poi sotto-cateogoria (qui però il tutto non avviene prima andando dalla pagina categoria pricipale e poi da lì è presente la lista delle sotto-categorie ma direttamente dall'HEAD menu con diverse opzioni selezionabili partendo dal "bottone della categoria principale")

    quindi se io vado nella sotto categoria dal footer menù ho la seguente URL
    *it/subcategory
    *
    ma se la seleziono dall'HEAD menù ho la seguente URL
    it/category/subcategory

    poi ho anche le categoria principali presenti nel footer menù dalle quali vado al seguete url
    it/category-footer (ho dovuto aggiungere -footer poichè il sistema non mi permetteva di dare lo stesso alias)

    gli articoli invece hanno la seguente url
    it/subcategory/myarticle (nel caso di sotto-categoria)
    it/category/myarticle
    (nel caso di categoria principale)

    quindi i link "cliccabili" per gli articoli hanno la seguente struttura /category/artcile

    altro è se provo a scrivere a mana per raggiugenre un'articolo presente in una sotto categoria

    come potrei risolvere?


  • Moderatore

    Ho studiato il problema del routing di Joomla ed è complesso, il sistema ha delle caratteristiche che rendono difficile il compito dei componenti seo/sef al punto che anche le più note estensioni a pagamento non risolvono al 100%.
    Il mio plugin è una soluzione particolare e funziona su una data configurazione, che tradotto vuol dire che non è una soluzione generalizzata (altrimenti l'avrei distribuito free). Il mio parere, personalissimo e non condiviso da altre persone, è che al momento soltanto l'intervento "manuale" dei webmaster/seo permette ai singoli siti di essere configurati al meglio.

    Se facessi un elenco delle "url pazze" ci sarebbe da andare in ansia, quelle che hai trovato non sono che una minima parte di quelle che si possono generare.
    Un mini argine a tutto questo è costituito dall'uso corretto dei menu, che sono associati ad alias e url nuove.

    come potrei risolvere?
    Per quanto mi sforzi non ho il tuo sito davanti e non riesco a fare una diagnosi a distanza, ti dico soltanto che se fosse il mio sito analizzerei a fondo i menu per capire se sono co-responsabili di alcune di queste url, cosa probabile. Fatta pulizia e riscritti i menu in modo corretto, testerei tra le estensioni seo/sef disponibili quella che nel caso specifico ma meno danni. Interventi via htaccess solo in casi particolarissimi, occorre fare molta attenzione.


  • User

    ti rigrazio

    rivedo i menù

    e ti faccio sapere


  • User

    Forse ho risolto per quanto rigurda le url delle categorie raggiugibili dai due menù

    ossia nel footer menù avendo le stesse categorie che ho nell'Head menù

    invece di creare una nuova voce dello stesso tipo dell'Head menù e con lo stesso nome

    creo un alias dell voce menù con lo stesso nome della voce dell'Head menù

    e quindi avrei le stesse url cliccando sulle categorie dell'Head menù partendo anche dal footer menù :sun:

    per gli articoli invece come ho già detto sopra se vado in un articolo appartenente ad una subcategory ho la seguente url

    /it/subcategory/myarticle

    ma se inserisco a mano

    /it/category/subcateogry/myarticle

    vado allo stesso articolo

    con due url diverse raggiungo gli stessi contenuti

    il secondo caso non è generato in automatico ma solo scrivendo a mano l'url

    secondo voi quale URL sarebbe corretta e perchè

    e come mi potrei ricondurre ad un unica url

    grazie


  • Moderatore

    La soluzione dell'alias ai menu è corretta. 😉

    La cosa delle url inserite a mano (come per /it/subcategory/myarticle e /it/category/subcateogry/myarticle) dipende da Joomla. Come ho detto non ho trovato la soluzione generale e al momento l'unico modo per difendersi è fare attenzione alla configurazione, ai menu e ai link inseriti a qualunque titolo.


  • User

    ok

    cofermo che la soluzione risolve i problemi di url duplicate ed anche quelle inserite a mano

    ad es.
    ho un articolo in una subcategory
    quindi il path per raggiungerlo è il seguente
    /it/category/subcategory/myarticle

    se provo ad inseire a mano
    /it/category/myarticle

    mi ritorna una pagina 404
    e la stessa cosa accande se provo con
    /it/subcategory/myarticle

    quindi adesso dovrebbe esistere un unico percoso assoluto per raggiungere le risorse nelle sottocategorie e nelle categorie

    spero possa essere utile a qualcuno che ha lo stesso problema (in pratica nel caso pdi due o più menù che puntato agli stessi contenuti e consigliabile utilizzare uno con le voci del menù configurate per puntare ai contenuti e gli altri con le voci come alias di quello che punta ai contenuti)

    tocca solo risolvere la questione legata ai numeri nelle url

    io per adesso adotto questo workaorund per la sola home del sito

    nel file .htaccess iserisco le seguenti righe

    L'espressione regolare (\w{2})? serve ad includere l'eventuale codice di lingua, che non fa parte del routing del componente, ma è presente nell'url della pagina. l'url SEF può avere o meno il codice di lingua
    RewriteCond %{REQUEST_URI}  ^(/\w{2})?/[0-9]  
    RewriteRule .* - [L,R=404]
    

  • Moderatore

    A mio parere le ultime istruzioni riguardo l'htaccess non vanno inserite, meglio non fare nulla.


  • User

    Ciao FDA

    ho trovato delle righe di codice che almeno nel mio caso recuperano l'url corretto anche se metto a mano un numero nell'url

    $uri = JURI::getInstance();
    require_once(JPATH_SITE . '/components/com_content/helpers/route.php');
    $link_article = JRoute::_(ContentHelperRoute::getArticleRoute($row->id, $row->catid));
    $link_article = $uri->getScheme() . "://" . $uri->getHost() . $link_article;
    

    queste righe le ho recupaerate da un plug in che inserice un meta tag particolare ed analizzando l'html della pagina ho notato che l'url che pescava era semrpe quello dove si trovava la risorsa (parlo del caso particolare riferito alla pagina articolo)

    in pratica se io scrivo

    mysite.com/it/4

    oppure

    mysite.com/it/category/4

    la variabile $link_article mi restituirà il riferimento corretto

    adesso potrei fare un costrutto condizionale dove solo per view article
    confrontando $link_article con l'url della query
    nel caso sia diversi mi restiuisce la pagina errore articolo non trovato con status 404

    solo che non saprei come procedere

    secondo voi è la strada corretta?


  • User

    Salve

    ho testato il seguente codice

    // in caso di url "sbagliata" verso la pagina articolo 
                $uri_correct = JURI::getInstance();
                require_once(JPATH_SITE . '/components/com_content/helpers/route.php');
                 $link_article_correct =  JRoute::_(ContentHelperRoute::getArticleRoute($this->item->id,  $this->item->catid));
                $link_article_correct = $uri_correct->getScheme() . "://" . $uri_correct->getHost() . $link_article_correct;
    
                $currenturl = JURI::current(); // url corrente
                
                if ($currenturl != $link_article_correct) {
                   
                    $this->error = JError::raiseError(404, JText::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND'));
                       $this->debug = false;
                }
    

    e sembrerebbe funzionare
    cioè quando
    inserisco a mano

    mysite.com/it/4

    oppure

    mysite.com/it/category/4

    mi restituisce la pagina di errore 404

    che ne pensate è corretto tale comportamento?


  • Moderatore

    Ciao,
    farò un test, ma a occhio non risolve.


  • User

    Ti ringrazio.

    nel caso non adempisse del tutto al compito potresti aiutarmi a migliorarlo


  • Moderatore

    Questione interessante e da seguire, sono d'accordo. :smile5:
    Grazie a te.


  • User

    Ciao

    Buone Feste a tutti

    hai avuto modo di testare il codice?

    ah dimenticavo

    il codice l'ho inserito nel file che genera la pagina articolo

    templates/mytemplate/html/com_content/article/default.php

    così viene richiamato solo quando viene richiesta una pagina articolo
    l'ho inserito tra i tag <?php ?> prima dell'html dentro il file


  • Moderatore

    Ciao p_il_musicante,
    buone feste anche a te. :smile5:
    Per la verifica non ancora, me lo impedisce il mio Io pigro e festoso.:D


  • Moderatore

    Ciao p_il_musicante,
    l'ho provato e confermo i dubbi:

    1. gestisce soltanto alcune situazioni (qui però si può migliorare);
    2. sbagliato immettere il codice a livello di template (anche qui si può intervenire);
    3. ho dubbi su compatibilità e affidabilità con altre estensioni/configurazioni.

    Se ci sono novità aggiorno il thread. :wink3:


  • User

    Grazie FDA

    Ti rigranzio per i test che hai fatto

    sul punto 2) perchè è sbagliato se io utilizzo solo quel template?

    per il punto 1) pensi che come punto di partenza è corretto per poi migliorare?


  • Moderatore

    Sul punto 1: attualmente non risolve alcune situazioni con relative url, ma soltanto specifiche url legate agli articoli. Secondo me il "punto di partenza" valido è l'idea, mentre per l'implementazione occorre lavorarci sopra.
    A riprova dell'attualità e della complessità del problema leggi la roadmap dello sviluppo pubblicata oggi (3 gennaio 2015) su Joomla.org, che prevede per il primo quadrimestre 2016:

    *- Improve Search Engine Optimization and SEF URL's. Take advantage of currently available resources.

    • Explore new routing options which can improve SEF while still maintaining backwards compatibility.*

    Link di approfondimento: docs.joomla.org/index.php?title=Joomla_CMS_Development_Roadmap

    Sul punto 2: dobbiamo mantenere per quanto possibile separata la presentazione dei dati dalla logica di funzionamento.


  • User

    Grazie per il link sulla roadmap

    solo che aspettare il 2016 per qualcosa (si spera di definitivo) che risolva la questione mi sembrebbe un pò troppo tempo 😮

    io sto provando ad implementare qualcos'altro sempre partendo da quello che ho già iniziato

    $uri_correct = JURI::getInstance();
              
                $link_base = $uri_correct->getScheme() . "://" . $uri_correct->getHost() ;
                
                jimport('joomla.language.helper');
                $languages = JLanguageHelper::getLanguages('lang_code');
                $lang_code = JFactory::getLanguage()->getTag();
                $langtag_site = $languages[$lang_code]->sef;
                
                //$lang = JFactory::getLanguage();
                //$langtag_site = $lang->getTag();
    
                        
                //connesione al DB
                $db = JFactory::getDbo();
                //content id
                $id = jrequest::getInt('id');
                
                $db->setQuery("SELECT cont.alias FROM #__content cont WHERE cont.id='$id'");
                $alias_content = $db->loadResult();
                
                $db->setQuery("SELECT cont.catid FROM cont WHERE cont.id='$id'");
                $cat_id = $db->loadResult();
                
                $db->setQuery("SELECT cat.path FROM #__categories cat WHERE cat.id='$cat_id'");
                $category_path = $db->loadResult();
                
                 // in caso di url "sbagliata" verso la pagina articolo 
               
                $link_article_correct = $link_base.$langtag_site."/". $category_path."/".$alias_content;
    
                $currenturl = JURI::current(); // url corrente
                
                if ($currenturl != $link_article_correct) {
                   
                    $this->error = JError::raiseError(404, JText::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND'));
                       $this->debug = false;
                }
    

    che ne pensi?