ResolvedXenForo SEO URL Değiştirme Eklentisi

MeteanYalim

Customer
Licenced
Joined
May 13, 2026
Messages
8
Reaction score
2
Points
108
1/3
Thread owner
Merhabalar,

XenForo sistemine yeni başlayan biriyim forum'um daha yapım aşamasında (no-index durumunda).
Ama URL yapısı hiç hoşuma gitmedi ve göz aşinalığım olmadığı için /konu-adi.id/ şeklinde olan url'leri /konu-adi-id/
/user.id/ olan url'leri /user-id/ olarak güncelleyen bir çakma eklenti oluşturdum.

/forums/ ve /categories/ leri manuel olarak Setup > Route filters'e eklediğim için bu kısımları bu eklenti içerisine eklemedim. Zaten yenisi açılmayacak açılsa da manuel eklerim diye düşündüm.

/misc/ /help/ vb görünen her yeri Setup > Route filters kısmında bunları da ekledim. Bunlar dışında user ve konu kısımları önemli onları kullanıcı da açabiliyor otomatik kontrol dışı diye kodladım. Şimdi sizlere danışmak istedim threads ve members dışında .id (nokta.ID) li atladığım eklentiye eklememiz gereken bir kısım var mı?

Ayrıca: 3, 4, 7, 8, 9 gibi VIP üyelere /members/admin-1/ yada /members/admin.1/ gibi olması yerine doğrudan /admin/ olacak şekilde ayarladım. Böylece PREMİUM Hissiyat oluşturulacağını düşündüm.

İşte kodlar:
PHP:
Dear Guests, welcome! Please, Log in or Register to view hide content!

Eklenti sonrası açılan konu url şu şekilde: siteadresi.com/emojis-and-brand-assets-etc-6/#post-7

XenForo'dan daha tam anlamadığım için eklenti haline bile getiremedim ve o şekilde kuramadım. PHP altyapısını bildiğim için bu tarz bir php dosyası ile class extension'a manuel ekleyerek sorunumu çözdüm.
Ama unuttuğum atladığım bir yer var mı? Geliştirilmeli mi? Yoksa bu kadar yeterli mi? Deneyimli dostların değerli yorumlarını bekliyorum.


Keyifli forumlar..
 
Solution
Merhaba;

XenForo için farklı yaklaşımları ve bu konudaki öğrenme ve geliştirme çabalarını her zaman desteklemişimdir. Kodlarınızı üşenmedim inceledim. Bunun içinde size aşağıda bazı teknik terimler ile bilgi vermek istedim.

Bir XenForo Geliştiricisi gözüyle bu kodu incelediğimde, bu yapının canlı bir forumda kullanılmasının sistemi çökertebilecek, performansı yerle bir edecek ve ileride çözülmesi imkansız bug'lara yol açabilecek ciddi mimari hatalar barındırdığını söylemeliyim.

XenForo, performans odaklı ve yüksek trafikli siteler için tasarlanmış devasa bir framework'tür. Bu tarz bir yaklaşımın dezavantajlarını ve XF mimarisine göre işin doğrusunu aşağıda detaylıca açıklıyorum.

Mevcut Kodunuzun XenForo Açısından...
Merhaba;

XenForo için farklı yaklaşımları ve bu konudaki öğrenme ve geliştirme çabalarını her zaman desteklemişimdir. Kodlarınızı üşenmedim inceledim. Bunun içinde size aşağıda bazı teknik terimler ile bilgi vermek istedim.

Bir XenForo Geliştiricisi gözüyle bu kodu incelediğimde, bu yapının canlı bir forumda kullanılmasının sistemi çökertebilecek, performansı yerle bir edecek ve ileride çözülmesi imkansız bug'lara yol açabilecek ciddi mimari hatalar barındırdığını söylemeliyim.

XenForo, performans odaklı ve yüksek trafikli siteler için tasarlanmış devasa bir framework'tür. Bu tarz bir yaklaşımın dezavantajlarını ve XF mimarisine göre işin doğrusunu aşağıda detaylıca açıklıyorum.

Mevcut Kodunuzun XenForo Açısından Dezavantajları ve Kritik Hatalar
1. Performans Katliamı olarak görebiliriz. buildRouteUrl metodu, XenForo'da bir sayfa yüklenirken ekrana basılan her bir link için tekrar tekrar çalışır. Bir ana sayfada 50 konu, 100 kullanıcı profili linki varsa, bu fonksiyon saniyede yüzlerce kez tetiklenir.
  • Kodunuzda her üye linki oluşturulurken instanceof \XF\Entity\User kontrolü yapılıyor, kullanıcının ikincil grupları (secondary_group_ids) virgülle ayrılıp (explode) dizi birleştirme (array_merge) yapılıyor.
  • Üstüne karmaşık Regular Expression (preg_replace) işlemleri uygulanıyor. Bu durum sayfa yüklenme sürelerinizi korkunç derecede uzatacaktır. XenForo, bu tür string işlemlerini minimumda tutmak için linkleri çok daha basit (regex )olmadan oluşturur.
2. DDoS ve Yük Riski
XenForo'da routeToController sisteme gelen her isteğin (URL'in) nereye gideceğine karar veren kapıdır.
PHP:
Dear Guests, welcome! Please, Log in or Register to view hide content!
Bu kod parçası, eşleşmeyen herhangi bir URL geldiğinde (örneğin 404 sayfaları, silinmiş eski linkler, botların taradığı rastgele URL'ler) doğrudan veritabanına SELECT sorgusu atıyor. Kötü niyetli biri veya bir bot saniyede 1000 tane rastgele URL (örn: site.com/asdasdasd) çağırdığında, siteniz saniyede 1000 adet veritabanı sorgusu yapmaya çalışacak ve MySQL saniyeler içinde kilitlenecektir. Routing katmanında (çok zaruri kalmadıkça) veritabanı sorgusu yapılmaz.
3. Hardcoded (Gömmeli) Rota Listesi

Sistemin diğer sayfalarının etkilenmemesi için login, register gibi onlarca rotayı bir diziye manuel yazmışsınız. XenForo'nun mimarisi dinamiktir. Yarın sisteme XenForo Resource Manager (xfrm) veya Media Gallery (xfmg) kurduğunuzda, ya da herhangi bir eklenti (örn: shop/) kurduğunuzda, bu rotalar sizin $corePrefixes dizinizde olmadığı için eklentiniz bunları Konu (Thread) sanıp yönlendirmeye çalışacak ve tüm eklentileriniz kırılacaktır.

XenForo Mimarisine Göre Nasıl Olmalı?
Sizin yapmak istediğiniz URL estetiği işlemi, XenForo'nun çekirdek yapısını "hackleyerek" (regex ile araya girerek) değil, XenForo'nun sunduğu yönlendirme (Routing) araçlarıyla yapılmalıdır.

1. Prefixleri
XenForo admin panelinde Setup > Route filters (Rota Filtreleri) adında muazzam bir özellik vardır.
  • /threads/ prefixini tamamen gizlemek XF mimarisinde önerilmez (diğer rotalarla çakışma yaratır), ancak illa değişecekse Rota Filtreleri kısmından threads/ rotası konu/ veya c/ gibi çok kısa bir yapıya kod yazmadan çevrilebilir.
  • Prefixi tamamen kaldırmak XenForo'nun Rota Çözücü (Route Matcher) yapısını bozar ve performans kaybı yaratır.

Sonuç olarak; bu eklenti her sayfa yüklemesinde gereksiz sorgular ve karmaşık metin işlemleri yaparak sitenizin performansını ciddi şekilde düşüreceği ve ileride eklenti çakışmalarına (çökmelere) yol açacağı için kesinlikle kullanılmamalıdır. Bu tarz URL değişiklikleri kod yazarak değil, XenForo'nun kendi içindeki "Route Filters" (Rota Filtreleri) özelliği kullanılarak, mimariye uygun ve performans kaybı yaşanmadan yapılmalıdır.
 
Solution
Thread owner
Osman bey verdiğiniz değerli bilgiler için çok teşekkür ederim. Site şuan bomboş ve kullanıcısız olduğu için bu kodlar sorunsuz ve mükemme çalışıyor gibi görünüyor ama sizin gibi deneyimi ve ileriye dönük düşününce kendi kafama sıktığımı fark ettim. ama aslında tek istediğim site.com/konu-adi-id olmasıydı.
/konu-adi.id/ veya /konu/konu-adi-id/ şeklinde oluşumlar hoşuma gitmiyor. Setup > Route filters (Rota Filtreleri) buradan'da bütün konuları profilleri tek tek çeviremem diye böyle bir işe kalkıştım ama canlıya geçmeden bunu iptal edip alternati çözüm üzetmeliyim. Değerli vaktinizi ayırıp kodları incelediğiniz ve yorumlayıp beni aydınlattığınız için çok ama çok teşekkür ederim.

İyi Çalışmalar.
 
Thread owner
Setup > Router filters'den.

Find route: threads/{name:string}.{name:digit}/
Replace with: t/{name:string}-{name:digit}/

yapınca oluyor aslında ama t/ de eklemek istemiyorum. Tüm sorun burada başlıyor. :)

The replace route must start with a route prefix.

Oda inatçı bende. Ama bir şekilde onun suyuna giderek çözeceğiz bu sorunu. Ama kesinlikle bu yöntemle değil. Başlamadan sıkıntılı bir yoldan döndüm ileride fark etsek indexleri taşımakta büyük sorun oluştururdu iyiki burada danışmışım hiç bu açıdan bakmamıştım.
 
Quick Jump
Back
Top Bottom