Any example of SEO success built on Bubble?

I’m not a 100% sure what your last post was about, whether it was asking a question or making statements on how you might anticipate problems.

More like a statement of how I had seen things working in the forum and what I had discussed with Bubble support. Yesterday I did also discover another “unpleasant” limitation from Bubble that they don’t use any of the AWS regions in Europe for the hosting, which kind of also explains why it’s taking around 12-14 seconds for my pages to load (I’m in Spain) :sweat: .

If, I were building an app that would require SEO and I would be needing good SEO for more than just one type of content (in your screen shot you only show structured data for products so I can not assume you need more than one, but many developers would), I would definitely not be building it as an SPA since the need for on page SEO, like the structured data in header and page title/meta description and images for social sharing would require inline conditionals, the likes of which could end up slowing down the speed at which those inline conditionals are evaluated and causing Google crawlers to leave the page before any content is loaded. If, you only require one type of content, such as products only, to be used for SEO, then you can use an SPA approach, but you need to know everything there is about how to improve your page load speed for an SPA.

The screenshot was taken from another thread I saw in the forum, it’s not my setup. I think I could get away with one type of content if architected correctly …
Ideally my page would be structured in the following way:

I think these two pages from above could be grouped in an SPA fashion using visibility conditionals. When I would select one of the options (of data type “X”) presented by the above-mentioned RG, then I would like to set the value of the “main-category” page data type as of the one of the item selected in the RG. I could still play with conditionals and say that, when This Page’s thing “is not empty”, show only the layout corresponding to the element from the RG I want to display and hide everything else, but I’m not sure if this would already add a lot of overhead or not.

In my multi language site in which I have product page, blog and jobs, I have a page for ‘shop’ (product search results and selected product are on the same page), page for ‘blog’ (all categories are displayed as well as a selected blog article on the same page…meaning can be .com/blog/en/home or .com/blog/th/home or .com/blog/en/how-to-do-seo or .com/blog/th/how-to-do-seo) as well as one page for ‘jobs’ which again like the page for products is used to display the job search as well as selected job so url can be .com/jobs/en (shows search results) as well as .com/jobs/en/construction-manager-pepsi-co and the same for the ‘th’ versions.
In my site I have structured data setup for the selected product, blog post or job, as well as for the product search, blog categories and job search…I needed to use inline conditionals to determine 1st, what language, 2nd, is there a selected product, article or job.
The way that I set things up, my site SEO data is picked up by Google properly.

Would you be kind enough to share your site? It seems like you’ve accomplished to implement something very similar to what I’m trying to do so it could be pretty useful for me. How have you handled the actual translations of your content if I may ask? Using conditionals? Plugin? Translate API? I want to find the most efficient way of doing this as well adding as little overhead as possible. One of my concerns is the language used in the URL path as such, I would ideally like to have the URL path in the same language that gets selected to be displayed to the user, but I guess that would require making copies of all pages for each language (and maintaining them).

Additionally, in my app that I mentioned having product search and selected product on the same page, I can not use the content type, nor can you use content type when using multiple languages the way I have where I put the language code in the url path list as .com/blog/en or .com/shop/en

Can you elaborate on this? Why can’t you use content type when having product search and product in the same page? (this is kind of what I need)
Similarly for the multiple language set up, why wouldn’t it be possible to use content type in that scenario? Is it somehow related to the fact that the content type you’d be referencing would come straight from the Database and hence not translated? (I guess in this case working with Translate API would be the only option)

Many thanks for your detailed response!

You’d be better off to have your setup by .com/es/main-category/subcategory as that way you can create a page for es and name it es…otherwise you need a page for each main-category

You can not make two pages grouped into a single page. And, you can not alter the URL path list of the index page and keep the url as myapp.com it would turn into myapp.com/index

But this is just me, others may do just fine using App text if they do not care to make the language change superquick or will have different pages for different languages so they can use app text and still get google to index their pages for each language.

In terms of translating the content, I use ChatGPT or Google Translate APIs.

Not really. I have my Thai version of the article use a thai language slug as part of the path list and my english version uses an english slug.

You can but it adds complexity. For one thing, when you use a content type on the page Bubble Forces you to send data whether you want to or not, so you can not use the go to page workflow action unless you are going to send data, and if you want to not send data you still need to send data but it has to be empty so you need to save onto the user data type a field that is of the same data as the page content type but make that field empty, so when you don’t want to send data you send the current users empty field, but that eliminates your ability to send text as data to structure your URL path list properly.

Can not send text to structure your URL path list properly.

If you don’t care about getting your page indexed for different languages that would work…but if you want google to index your pages for different languages, their crawlers are not going to wait around long enough for a translation API to translate all the dynamic content on the page after the crawler already had to wait for that dynamic content to be sent from your server…if you think your page load speed now is a barrier, wait till you add another 2 interactions between client and server (ie: client sends API call to server to translate, server translates and sends back to client translated values).

Sorry yes, I said I can get away with one single content type … but I meant per category. I must then have three different content types at least, meaning three top level category pages *and hence the lang path tag coming after it…(

You can get the slug part of this: http://www.myweb.com/main-category/es/subcategory/slug
in the right language, but “main-category” and “subcategory” names would be in a predefined language unless I duplicate everything (main category and subcategory pages) I guess … problem here is that switching the language would effectively reload the page as it would effectively be loading a different one (although not something that the users will be doing that often)

Got it now thanks, need to see how to overcome that limitation … or don’t use content-type at all and leverage solely URL params or custom states

Makes sense as well, thanks for the comments, probably best to manually duplicate the content then in each language (I’ve seen your post about Option Sets so I´ll do some digging)

I guess you use a dynamic expression to change “hreflang” parameter value in the header depending on the URL path?

No, same suggestion as before, make a page for the language, so it would be .com/es/ then after the name of page (ie: es) you can change all the main and subcategory path list components as you’d like. You also wouldn’t need to worry about the change of language except that if a user changes the language when on page es then you’d navigate to the page of the language they chose.

In the end there are lots of different ways to do things and the choices you make are up to you and the use case you have.

No, not if you followed the tip post I linked in which I have a video demonstrating my change of language takes 1/2 second at most. But that is for my app and the setup I have for my use case in which I do not have different pages for different languages.

No. Don’t use URL parameters, they are not good for SEO. Don’t use custom states they are temporary. Use URL path list.

Yes.