# Development

 

##  [ Generator Tag: Claim Your Joomla Sites ](/blog/development/generator-tag-claim-your-joomla-sites) 

 

  [ ![Stealth Signatures: Claim Your Joomla Sites](https://cdn.richeyweb.com/images/articles/generator-tag-claim-your-joomla-sites/generator-tag.webp) ](/blog/development/generator-tag-claim-your-joomla-sites "Generator Tag: Claim Your Joomla Sites")    You build websites. You pour hours into custom themes, tweak extensions, and optimize every line of code. But how do you prove it's yours? A footer credit? Too obvious. A hidden comment in the HTML? Clunky and easy to miss. Enter the generator meta tag. It's sitting there in the head of most Joomla pages, whispering the site's origin story to anyone who peeks at the source code. By default, it shouts "Joomla! 5.x.x" or whatever version you run. Useless for SEO, sure. But ripe for repurposing.

 [  Read more: Generator Tag: Claim Your Joomla Sites ](/blog/development/generator-tag-claim-your-joomla-sites)

 

 

##  [ Bug Reports: A Developer's Best Friend, Not a Burden ](/blog/development/bug-reports-a-developers-best-friend-not-a-burden) 

 

  [ ![Bug Reports: A Developer's Best Friend, Not a Burden](https://cdn.richeyweb.com/images/articles/plg_content_interlinked/articles/russian-comments.webp) ](/blog/development/bug-reports-a-developers-best-friend-not-a-burden "Bug Reports: A Developer's Best Friend, Not a Burden")    As a developer, I’ve heard the grumbling from some peers: bug reports are a hassle, a drain on time, or even a personal attack on their work. But I see them differently. Bug reports are a favor—a gift from users who care enough to help us improve our software. A recent experience with my Joomla plugin, [Content - InterLinked](/software/joomla/plugins/content-interlinked), drove this home. A user’s informal comment, found by sheer luck, revealed a critical issue that could have lingered for months without a formal report. This article explores why clear, direct, and official bug reports are essential for developers and users alike, using this case as a vivid example.

 [  Read more: Bug Reports: A Developer's Best Friend, Not a Burden ](/blog/development/bug-reports-a-developers-best-friend-not-a-burden)

 

 

##  [ Canonical HTTP Headers for RSS Feeds ](/blog/development/canonical-http-headers-for-rss-feeds) 

 

  [ ![Canonical HTTP Headers for RSS Feeds](https://cdn.richeyweb.com/images/articles/canonical-http-headers-for-rss-feeds/gsc-duplicate-without-user-selected-canonical.webp) ](/blog/development/canonical-http-headers-for-rss-feeds "Canonical HTTP Headers for RSS Feeds")    [System - Link Canonical](/software/joomla/plugins/system-link-canonical) Version 5.3.0+ introduces support for adding canonical URLs to RSS feeds via HTTP Link headers, addressing Google Search Console's "Duplicate without user-selected canonical" errors for feed URLs (e.g., https://www.example.com/blog?format=feed&amp;type=rss). Since RSS feeds lack an HTML &lt;head&gt; for traditional &lt;link rel="canonical"&gt; tags, the plugin now dynamically injects a Link header per RFC 5988 to specify the preferred canonical URL.

 [  Read more: Canonical HTTP Headers for RSS Feeds ](/blog/development/canonical-http-headers-for-rss-feeds)

 

 

##  [ X Autopost: Player Cards ](/blog/development/x-autopost-using-the-player-card) 

 

  [ ![Player Card Example](https://cdn.richeyweb.com/images/articles/plg_system_xautpost/player-card-example/screenshot.webp) ](/blog/development/x-autopost-using-the-player-card "X Autopost: Player Cards")    The player card option in X Autopost is relatively easy to use. For the most part, your article doesn't change in any way, though you are linking to it - and if you're setting up a player card, the video should probably also be displayed in your article.

 [  Read more: X Autopost: Player Cards ](/blog/development/x-autopost-using-the-player-card)

 

 

##  [ Server-Timing for GeoIP Data Delivery to Achieve GDPR Compliance ](/blog/development/server-timing-for-geoip-data-delivery-to-achieve-gdpr-compliance) 

 

  [ ![Server-Timing for GeoIP Data Delivery to Achieve GDPR Compliance](https://cdn.richeyweb.com/images/articles/geoip-coming-soon/geoip-coming-soon.webp) ](/blog/development/server-timing-for-geoip-data-delivery-to-achieve-gdpr-compliance "Server-Timing for GeoIP Data Delivery to Achieve GDPR Compliance")    Delivering GeoIP data for GDPR and EU e-Privacy Directive compliance without sacrificing website performance is a significant challenge. Server-side GeoIP lookups can disrupt caching systems like Varnish, while client-side solutions are slow or unreliable. This article introduces a groundbreaking discovery: using the Server-Timing header to deliver GeoIP data post-caching, enabling compliance and personalization while preserving speed. This server-side solution, implemented with nginx and Varnish, is the first step toward updating the [System - EU e-Privacy Directive](/software/joomla/plugins/system-eu-e-privacy-directive) Joomla extension to display cookie consent banners only for EU visitors. Beyond GDPR, it supports broader GeoIP applications (e.g., city, state, continent) for content personalization, analytics, and more, all while maintaining cache performance.

 [  Read more: Server-Timing for GeoIP Data Delivery to Achieve GDPR Compliance ](/blog/development/server-timing-for-geoip-data-delivery-to-achieve-gdpr-compliance)

 

 

##  [ Problems Turn Into Features ](/blog/development/problems-turn-into-features) 

 

  [ ![Problems Turn Into Features](https://cdn.richeyweb.com/images/articles/problems-turn-into-features/problems-turn-into-features.webp) ](/blog/development/problems-turn-into-features "Problems Turn Into Features")    I'm all about creating free Joomla extensions that make your life easier, and sometimes the best ideas come from the smallest frustrations. That’s exactly what happened with the latest update to our [Content - Indexing API](/software/joomla/plugins/content-indexing-api) plugin, problems turned into features. Now available in version 5.2.0 and up.

 [  Read more: Problems Turn Into Features ](/blog/development/problems-turn-into-features)

 

 

##  [ The Humbling Art of Free Software ](/blog/development/the-humbling-art-of-free-software) 

 

  [ ![The Humbling Art of Free Software](https://cdn.richeyweb.com/images/articles/facepalm.avif) ](/blog/development/the-humbling-art-of-free-software "The Humbling Art of Free Software")    As a Joomla extension developer, I’ve spent years building and sharing free extensions with the Joomla community. It’s a labor of love—crafting tools like my [Contact - Valid Email](/software/joomla/plugins/contact-valid-email) and [User - MX Filter](/software/joomla/plugins/user-mx-filter) plugins to help site admins fight spam and keep their forms secure. But every so often, the open-source world delivers a humbling reminder that no matter how carefully you code, there’s always a blind spot waiting to surprise you. Today was one of those days, and it’s a story worth sharing.

 [  Read more: The Humbling Art of Free Software ](/blog/development/the-humbling-art-of-free-software)

 

 

##  [ Fair Reviews and Support ](/blog/development/fair-reviews-and-support) 

 

  [ ![Fair Reviews and Support](https://cdn.richeyweb.com/images/articles/fair-reviews-and-support/fair-reviews-text.webp) ](/blog/development/fair-reviews-and-support "Fair Reviews and Support")    As a developer of free Joomla extensions, I’m incredibly grateful for the community that uses and supports my work. I strive to provide helpful extensions and, importantly, readily available support. It’s a rewarding cycle – users benefit, I gain valuable feedback, and the entire ecosystem thrives. A primary source of feedback comes from fair reviews.

 [  Read more: Fair Reviews and Support ](/blog/development/fair-reviews-and-support)

 

 

 

1. [ One Sh\*tty Email That Made Me Finally Do Something About Spam](/blog/development/one-sh-tty-email-that-made-me-finally-do-something-about-spam)
2. [ New GeoIP Coming Soon](/blog/development/new-geoip-coming-soon)
3. [ GDPR is Getting a Facelift - And I’m Not Crying Over It](/blog/development/gdpr-is-getting-a-facelift-and-im-not-crying-over-it)
4. [ Canonical Chaos, Round Four: Victory in Sight](/blog/development/canonical-chaos-round-four-victory-in-sight)
 
 

 Page 2 of 5

 - [  ](/blog/development?tmpl=markdown)
- [  ](/blog/development?tmpl=markdown)
- [ 1 ](/blog/development?tmpl=markdown)
- [2](#)
- [ 3 ](/blog/development?tmpl=markdown&start=16)
- [ 4 ](/blog/development?tmpl=markdown&start=24)
- [ 5 ](/blog/development?tmpl=markdown&start=32)
- [  ](/blog/development?tmpl=markdown&start=16)
- [  ](/blog/development?tmpl=markdown&start=32)
 
 

 

 

##### We Value Your Privacy

 

We use cookies to enhance your experience and for traffic analysis. By continuing to visit this site you agree to our use of cookies.

[Privacy Policy](/privacy-policy)

 Details 

###### Google Tag Manager Items

- Ad Storage
- Ad User Data
- Ad Personalization
- Analytics Storage
- Functionality Storage
- Personalization Storage
- Security Storage
 
 

 

 

 

 

 Decline Accept
```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.richeyweb.com/#organization","name":"RicheyWeb","url":"https://www.richeyweb.com/","logo":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/logo/richeyweb.svg","contentUrl":"https://www.richeyweb.com/images/logo/richeyweb.svg","width":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"@id":"https://www.richeyweb.com/#logo"},"image":{"@id":"https://www.richeyweb.com/#logo"},"sameAs":["https://x.com/ComRicheyweb","https://www.facebook.com/RicheyWebDev/","https://www.youtube.com/channel/UCxnVG8BwOvQRO7hVqNX7T2g","https://community.joomla.org/service-providers-directory/listings/115:richeyweb.html"],"description":"RicheyWeb is a custom software developer specializing in Joomla extensions.","ContactPoint":[{"@type":"ContactPoint","url":"https://www.richeyweb.com/contact-us","telephone":"903-873-8460","contactType":"Owner/Administrator","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"},{"@type":"ContactPoint","url":"https://www.richeyweb.com/bugs","telephone":"903-873-8460","contactType":"Technical Support","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"}],"knowsAbout":["Computer programming",{"@type":"Thing","name":"Computer programming","sameAs":["https://en.wikipedia.org/wiki/Computer_programming","https://www.wikidata.org/wiki/Q80006","https://g.co/kg/m/01mf_"]},"PHP",{"@type":"Thing","name":"PHP","sameAs":["https://en.wikipedia.org/wiki/PHP","https://www.wikidata.org/wiki/Q59","https://g.co/kg/m/060kv"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"arduino","Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"White hat",{"@type":"Thing","name":"White hat","sameAs":["https://en.wikipedia.org/wiki/White_hat_(computer_security)","https://www.wikidata.org/wiki/Q7995625","https://g.co/kg/m/03ns_5"]},"Search engine optimization",{"@type":"Thing","name":"Search engine optimization","sameAs":["https://en.wikipedia.org/wiki/Search_engine_optimization","https://www.wikidata.org/wiki/Q180711","https://g.co/kg/m/019qb_"]},"Search engine marketing",{"@type":"Thing","name":"Search engine marketing","sameAs":["https://en.wikipedia.org/wiki/Search_engine_marketing","https://www.wikidata.org/wiki/Q846132","https://g.co/kg/m/06mw8r"]},"Digital marketing",{"@type":"Thing","name":"Digital marketing","sameAs":["https://en.wikipedia.org/wiki/Digital_marketing","https://www.wikidata.org/wiki/Q1323528","https://g.co/kg/g/122hcnps"]},"Web hosting service",{"@type":"Thing","name":"Web hosting service","sameAs":["https://en.wikipedia.org/wiki/Web_hosting_service","https://www.wikidata.org/wiki/Q5892272","https://g.co/kg/m/014pz4"]},"Email hosting service",{"@type":"Thing","name":"Email hosting service","sameAs":["https://en.wikipedia.org/wiki/Email_hosting_service","https://www.wikidata.org/wiki/Q5368818","https://g.co/kg/m/09w60m"]},"Internet hosting service",{"@type":"Thing","name":"Internet hosting service","sameAs":["https://en.wikipedia.org/wiki/Internet_hosting_service","https://www.wikidata.org/wiki/Q1210425","https://g.co/kg/m/09w5yw"]},"Virtual hosting",{"@type":"Thing","name":"Virtual hosting","sameAs":["https://en.wikipedia.org/wiki/Virtual_hosting","https://www.wikidata.org/wiki/Q588365","https://g.co/kg/m/024mvh"]},"Web performance",{"@type":"Thing","name":"Web performance","sameAs":["https://en.wikipedia.org/wiki/Web_performance","https://www.wikidata.org/wiki/Q7978612","https://g.co/kg/m/0gfj3f1"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"General Data Protection Regulation",{"@type":"Thing","name":"General Data Protection Regulation","sameAs":["https://en.wikipedia.org/wiki/General_Data_Protection_Regulation","https://www.wikidata.org/wiki/Q1172506","https://g.co/kg/m/0pk_7xs"]},"SERP",{"@type":"Thing","name":"SERP","sameAs":["https://en.wikipedia.org/wiki/SERP","https://www.wikidata.org/wiki/Q2205811","https://g.co/kg/g/11c5szp7kc"]},"Artificial intelligence",{"@type":"Thing","name":"Artificial intelligence","sameAs":["https://en.wikipedia.org/wiki/Artificial_intelligence","https://www.wikidata.org/wiki/Q11660","https://g.co/kg/m/0mkz"]},"Prompt engineering",{"@type":"Thing","name":"Prompt engineering","sameAs":["https://en.wikipedia.org/wiki/Prompt_engineering","https://www.wikidata.org/wiki/Q108941486","https://g.co/kg/g/11p6kpgt_n"]},"E-learning",{"@type":"Thing","name":"E-learning","sameAs":["https://en.wikipedia.org/wiki/E-learning_(theory)","https://www.wikidata.org/wiki/Q182250","https://g.co/kg/g/122czm1f"]},"Sharable Content Object Reference Model",{"@type":"Thing","name":"Sharable Content Object Reference Model","sameAs":["https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model","https://www.wikidata.org/wiki/Q827811","https://g.co/kg/m/06_40"]},"Experience API",{"@type":"Thing","name":"Experience API","sameAs":["https://en.wikipedia.org/wiki/Experience_API","https://www.wikidata.org/wiki/Q7807728","https://g.co/kg/g/1yw9ktxr8"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Nginx",{"@type":"Thing","name":"Nginx","sameAs":["https://en.wikipedia.org/wiki/Nginx","https://www.wikidata.org/wiki/Q306144","https://g.co/kg/m/02qft91"]},"MySQL",{"@type":"Thing","name":"MySQL","sameAs":["https://en.wikipedia.org/wiki/MySQL","https://www.wikidata.org/wiki/Q850","https://g.co/kg/m/04y3k"]}],"areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"memberOf":["Mensa International",{"@type":"Organization","name":"Mensa International","sameAs":["https://en.wikipedia.org/wiki/Mensa_International","https://www.wikidata.org/wiki/Q184194","https://g.co/kg/m/0140pf"]},"National Rifle Association",{"@type":"Organization","name":"National Rifle Association","sameAs":["https://en.wikipedia.org/wiki/National_Rifle_Association","https://www.wikidata.org/wiki/Q863259","https://g.co/kg/m/0j6f9"]},"CompTIA",{"@type":"Organization","name":"CompTIA","sameAs":["https://en.wikipedia.org/wiki/CompTIA","https://www.wikidata.org/wiki/Q597534","https://g.co/kg/m/040shq"]},"ISFCE LLC",{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://isfce.com","https://g.co/kg/g/11wxm5r0rg"]}],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"Joomla 3 Certified Administrator","credentialCategory":"Certification","description":"Administrator Exam is the first available Joomla! certification exam","recognizedBy":{"@type":"Organization","name":"Open Source Matters, Inc.","sameAs":["https://en.wikipedia.org/wiki/Open_Source_Matters,_Inc.","https://g.co/kg/g/11f00wvjhz"]},"url":"https://certification.joomla.org/certified-user-directory/michael-richey","about":["Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/badge.webp","contentUrl":"https://www.richeyweb.com/images/contact/badge.webp","width":{"@type":"QuantitativeValue","value":300,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":86,"unitCode":"PX"},"caption":"Joomla 3 Certified Administrator"}},{"@type":"EducationalOccupationalCredential","name":"Certified Computer Examiner","credentialCategory":"Certification","description":"Internationally recognized computer forensics certifiecation","recognizedBy":{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://en.wikipedia.org/wiki/ISFCE_LLC","https://g.co/kg/g/11wxm5r0rg"]},"url":"https://isfce.com/","about":["Digital forensics",{"@type":"Thing","name":"Digital forensics","sameAs":["https://en.wikipedia.org/wiki/Digital_forensics","https://www.wikidata.org/wiki/Q3246940","https://g.co/kg/m/0cnxzfx"]},"Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"Mobile device forensics",{"@type":"Thing","name":"Mobile device forensics","sameAs":["https://en.wikipedia.org/wiki/Mobile_device_forensics","https://www.wikidata.org/wiki/Q6887097","https://g.co/kg/m/06zp3tp"]},"Network forensics",{"@type":"Thing","name":"Network forensics","sameAs":["https://en.wikipedia.org/wiki/Network_forensics","https://www.wikidata.org/wiki/Q7001032","https://g.co/kg/m/05pb280"]},"Database forensics",{"@type":"Thing","name":"Database forensics","sameAs":["https://en.wikipedia.org/wiki/Database_forensics","https://www.wikidata.org/wiki/Q5227405","https://g.co/kg/m/0cgqsy"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/isfce-cce.webp","contentUrl":"https://www.richeyweb.com/images/contact/isfce-cce.webp","width":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"caption":"Certified Computer Examiner"}}],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Web Services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Hosting"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Development"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Search Engine Optimization"}}]}},{"@type":"WebSite","@id":"https://www.richeyweb.com/#website","url":"https://www.richeyweb.com/","name":"RicheyWeb","publisher":{"@id":"https://www.richeyweb.com/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.richeyweb.com/search?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string","valueMaxLength":256,"valueMinLength":2,"valuePattern":"^[A-Za-z0-9\\s]+$"}},"creator":{"@id":"https://www.richeyweb.com/#organization"},"copyrightHolder":{"@id":"https://www.richeyweb.com/#organization"}},{"@type":"WebPage","@id":"https://www.richeyweb.com/blog/development/#webpage","url":"https://www.richeyweb.com/blog/development","name":"Development","description":"Custom web and mobile app development.  Specializing in Joomla, PHP, and task automation, RicheyWeb can streamline your processes and take your data mobile.","isPartOf":{"@id":"https://www.richeyweb.com/#website"},"about":{"@id":"https://www.richeyweb.com/#organization"},"inLanguage":"en-GB"}]}
```
