- Home
- Categorie
- Coding e Sistemistica
- Joomla!
- joomla url duplicati e contenuti duplicati cosa consigliate
-
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.
-
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/myarticlese provo ad inseire a mano
/it/category/myarticlemi ritorna una pagina 404
e la stessa cosa accande se provo con
/it/subcategory/myarticlequindi 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]
-
A mio parere le ultime istruzioni riguardo l'htaccess non vanno inserite, meglio non fare nulla.
-
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
oppure
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 404solo che non saprei come procedere
secondo voi è la strada corretta?
-
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 manooppure
mi restituisce la pagina di errore 404
che ne pensate è corretto tale comportamento?
-
Ciao,
farò un test, ma a occhio non risolve.
-
Ti ringrazio.
nel caso non adempisse del tutto al compito potresti aiutarmi a migliorarlo
-
Questione interessante e da seguire, sono d'accordo.
Grazie a te.
-
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
-
Ciao p_il_musicante,
buone feste anche a te.
Per la verifica non ancora, me lo impedisce il mio Io pigro e festoso.:D
-
Ciao p_il_musicante,
l'ho provato e confermo i dubbi:- gestisce soltanto alcune situazioni (qui però si può migliorare);
- sbagliato immettere il codice a livello di template (anche qui si può intervenire);
- ho dubbi su compatibilità e affidabilità con altre estensioni/configurazioni.
Se ci sono novità aggiorno il thread.
-
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?
-
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.
-
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?
-
solo che aspettare il 2016 per qualcosa (si spera di definitivo) che risolva la questione mi sembrebbe un pò troppo tempo
Concordo!
che ne pensi?
Tre osservazioni:
- Mancano dei "pezzi", ad esempio i menu e le query string: come ci comportiamo?
- A livello di template non si può, anche e non solo perché dovremmo modificare tanti file diversi di template e non soltanto quello relativo agli articoli: va creata necessariamente un'estensione, che può essere pure un plugin, quindi più semplice.
- Per quello che deve fare l'estensione e per quello che già fa Joomla, forse non serve la connessione al db.
Ovviamente non prendere quanto ho scritto per oro colato, sono soltanto opinioni.
Aggiungo qualche spunto a beneficio di tutti, chi vuole condividere test ed esperienze è il benvenuto!- La prima cosa da fare secondo me è leggere questo documento di Joomla, fino alla fine perché proprio l'ultimo paragrafo "Routers and Menu Items" spiega qualcosa che talvolta sfugge: docs.joomla.org/Supporting_SEF_URLs_in_your_component
- Altra pagina interessante da Joomla: docs.joomla.org/Search_Engine_Friendly_URLs
- Per inquadrare il problema bisogna partire da alcuni concetti chiave, che elenco come parole senza un ordine preciso: routing, menu item, seo sef, segmenti, canonical, query string, user's intention, com_content, components, 404, *compatibilità *(con altre estensioni), *robusto *(non viene messo in crisi da altre cose), *affidabile *(funziona e non combina guai, ad esempio provocando l'indicizzazione di urls errate).
Suggerimenti:
- Consultare il codice delle estensioni seo sef per trarre ispirazione.
- Spulciare il codice del core di Joomla per comprendere come lavora a livello di routing e di seo sef.
- Non dimenticare che Joomla non è una piattaforma di blogging ma, a modo suo, una piattaforma per creare web applications basata su MVC e, in quanto tale, sarebbe sbagliato ingabbiarla in una cosa rigida per la quale esistono altri cms a partire da WordPress. Se il mio sito è fatto sostanzialmente di post e permalink "1 a 1" allora potrei anche usare WP.
Discussioni utili sul Forum GT:
http://www.giorgiotave.it/forum/joomla/215313-problemi-di-pagine-duplicate-e-redirect.html
http://www.giorgiotave.it/forum/joomla/221062-joomla-3-3-adds-suffix-url-problemi-con-rel-canonical-e-contenuti-duplicati.html
http://www.giorgiotave.it/forum/joomla/221075-joomla-3-3-rel-canonical-e-query-string.html
http://www.giorgiotave.it/forum/joomla/224245-e-possibileppersonalizzare-url-di-joomla-2-5-e-3-0-questo-modo.html
-
Salve a tutti
dopo aver fatto passare al spider del motore di ricerca nel mio sito
ho notato sui web master tool che ho alcuni tag che risultano duplicati
nelle url ho notato che lo spider le richiede nel seguente formato
/category/myarticle?limit=4&start=4 (aggiunge dei parametri)
oltre a richiederle con l'url standard **/category/myarticle
a voi è capitata una cosa del genere ?
come potrei risolvere?
grazie
**
-
Ciao, puoi inserire una paio di url completi (link non attivo)?
-
Ciao
ti rigrazio per la rapida risposta
probabilmente ho capito a cosa è dovuto
al pagination del template
poichè ciò si verifica solo nella pagina articolo
in pratica quei parametri vanno ad influire su quanti e quali articoli correlati all'articolo corrente prelevare
per il momento ho inserito nel file robots.txt la seguente istruzione
Disallow: /*?
-
In questo modo blocchi l'accesso a tutti gli url con parametri, cioè quelli del tipo: tuodominio.estensione/qualunquecosa?qualunquecosa
Non è detto che un tale url non debba essere indicizzato.
Io non toccherei il robots e lavorerei invece sul codice per inserire un noindex dove serve, cosa che puoi fare via estensione da installare, con un tuo plugin o addirittura - in maniera poco elegante - via php.
-
quale estensione consiglieresti
o se è possible farlo tramite plug in (come si potrebbe fare)
in pratica quelle url sono dovute ai releated articles
diciamo che vorrei vitare di installre nuove estensione se non streettamente neccessario
o tramite php (intendi mdoficare il fiel router.php)