[UPDATED v2.2.0] 😃 Sudsy Page router for SEO-friendly clean URLs! (by Tech-Tonic)

Thank you very much for taking the time to respond to these. I’ll get to testing. Much obliged!

1 Like

Thank you! This is an awesome edition to Bubble for one page applications!

1 Like

Hi TechShot, implementing your plugin now, I am trying to use the external url structure on the home page but the link is going to a new page and I don’t know how to prevent this unless there is already a first parameter on the page like you have on the sudsy demo

Hi @253digital,

Unfortunately, the home/index page is the only page where it won’t work. As stated in the initial post of this thread…

The page name can be as short as you want - even just a single character - but the plugin must reside on an internal page. I will update the official docs to emphasize that as well.

No worries Shot, it’s not a big deal to rename the page and add a redirect from the bare domain to another page.

Thanks for making the plugin I was able to figure it out and it was really helpful!

Evan

@adrianmirza1997 Are you a specialist?

Hey Steve @sudsy , thanks for creating this. It’s going to solve problems for me that i didn’t know i had until today. Purchased and super keen to start using it in a few hours.

I do have three questions before I begin implementation:

First, if I want my homepage to be a sudsy page, can i just use a redirect from the index on page load? I’m going to have a /en page and then do the same with other languages in time. Then, for SEO purposes, would it make sense to include a crawlable link element on the index page for each of these language ‘homepages’ in order to have some type of connection - even if human users never see them?

Second, I have lots of internal pages with long-form text content and decent numbers of hyperlinks to my other internal pages. Normally just <a href tags. Do you know what the best way is to keep the SEO juice for these, taking from your earlier discussions with @boston85719 that text elements don’t work for SEO (hence using link elements for navigation). You mention the “Go to URL” workflow action in your documentation, but by my reading this action still needs to reference a link element in order to be crawled?

Third, for navigation I have a lot of group-focus elements with collapsable submenus. Currently text elements but i’ll be changing them to links. Most of these are not visible upon page load and appear upon hover (desktop) or click (mobile/tablet) of a drop-down style icon. Is that an impediment to SEO crawling? Is a sitemap of assistance here? I realise that this one may stretching the topic, but I thought I would ask as it’s related to my use-case.

Thanks,
Chris

Hi Chris, thanks for your purchase.

If I understand correctly, you’re asking not about using the plugin on the index page, but rather about redirecting from the index page to another page that uses the plugin. From a technical standpoint, I see no reason why that wouldn’t work, but whether or not it’s a good approach from an SEO perspective, I couldn’t say, as I don’t consider myself an SEO expert. I also haven’t created a multi-lingual site, but I know there are others who have, so perhaps they can offer some insights on the best approach.

Just use a Bubble Link element, as it generates an anchor <a> tag on the page. That’s what it’s for. The plugin’s Go to URL action was added primarily for the benefit of those creating single-page apps (SPAs) who don’t want the URL appearing on mouse-over (as most browsers do with hyperlinks). It can be used for any navigation where SEO is not a concern. There is no need to use both.

Again, I’m not really in a position to make SEO recommendations, so I can’t comment on the sitemap issue. I’m sure you’ll find plenty of info, though, with a forum or internet search.

As I describe in this post, however, Google does seem to render dynamic content and thus see each unique URL as a separate “page” to index (even though it’s technically a single Bubble page).

Hope that helps somewhat.

-Steve

FYI, the same BBCode that works in Text elements also works in Link elements, so you can create a hyperlink that looks like an icon…

Using this approach, you can create links that look like buttons or icons but which provide “SEO juice”.

EDIT: Of course, there’s also the Show an icon instead of text option, but I find the BBCode approach more flexible since Bubble’s expression builder can be used to construct the link text (which could contain 1 or more icons plus text).

Thanks for your replies @sudsy. I’ve done a bit more research and for the benefit of future readers here is what I have found.

  1. 301 redirect should do the job of moving my ‘main homepage’ to /en (which will be a sudsy page). The secondary homepages (/de /es etc) will live parallel to that. I don’t believe I need crawlable link elements on the page because the 301 does the work. This article was helpful as was this one, the key is to let the alternate language sites be user selected and not based on any redirect assumptions. I’m going to store links to my alt language ‘homepages’ in a group-focus that behaves like a drop-down.

  2. Link elements are the answer as you mention.

  3. Vertical menus are crawlable because robots scan the source code. They read HTML pages like a text file, so if the URL exists there, it should get indexed. If Bubble exposes urls like this (and link elements seem to) then it should all function well. Sitemap is still a must of course.

Cheers,
Chris

1 Like

While i’m on the topic, I think there is one spot where using navigable text elements can supplement link elements, and that’s for duplicate navigation. In my app/site I have a mobile menu and a desktop menu that load based on screen width. If they both contain link elements I have effectively duplicated every linked url in my nav. This is bad for SEO. My solution is to only use link elements on the desktop menu and leave the mobile links as text elements. This will allow desktop users to right-click to open pages in new tabs (less likely for mobile users), and will make sure that google only identifies a single set of urls. Google search console article for reference

Hi @sudsy I found a small bug you might want to be aware of:

When you run the app in version-test, SudsyPage's Path Param knows to ignore version-test.
When you run as a user in live version (from your database), the URL bubble creates has version-live appended to the end of Website Home URL. Sudsy Page's Path Param's 1st element evaluates to version-live in this case, which breaks many of the routes that are built in my app.
Is it possible to add parallel logic to ignore version-live just as it does for version-test?

Hi @jacob.b.singer,

Thanks for the head-up on that. I don’t think we’ve ever actually tested that scenario, so will look into it.

In the interim, if you manually remove the version-live path param from the URL after clicking run as, does that work for you?

-Steve

This should now be resolved, @jacob.b.singer. Thanks again for letting us know.

-Steve

Thanks @sudsy !! I missed your earlier message - the answer was yes, we could work around it by deleting version-live. But glad to not need to do that anymore!

Confirmed this works well!

1 Like

Hi @sudsy :wave: Wondering if you have any insight into a problem I’m facing. I’m building an SPA using your brilliant plugin. Everything is going swimmingly except for my SEO metadata. As you probably know, Bubble’s expression builder for SEO title’s and descriptions is not very … “expressive.” It can only refer to the current page’s thing, the current user, an option set, the current URL or an arbitrary data search. That is to say it cannot reference the current page’s elements or states. Even worse, the SEO fields are not accessible from the conditional logic builder. So whatever approach one adopts can’t rely on conditional logic to retrieve SEO metadata. Finally, testing has demonstrated that any searches performed within the SEO fields are run only once, on the initial page load. All of this has me more or less pulling out my hair. Do you know of any solution that would allow me to change the SEO metadata fields dynamically on URL change without reloading the page?

Edit: After thinking about this some more, I’m wondering if it would be possible to use Javascript or perhaps @ZeroqodeSupport’s CSS Tools plugin to modify the metadata in the page head? I’m not very familiar with JS, so a little intimidated by the prospect. That said, it seems to me that modifying the metadata prior to changing the URL might be a hacky way of preserving the performance of one’s SPA without sacrificing good SEO. Do you think this might work? Pinging @keith here since he’s a whiz with this sort of thing.

@sudsy Sorry to ping you twice in one night. However, I’m wondering if you could explain the relative benefits of using link elements vs workflow actions to navigate via the Sudsy plugin. I’m realizing that the solution suggested in my last post would require me to rely on workflows for most intra-page navigation. I’ve read suggestions that links are better from an SEO perspective, but don’t quite understand why that would be. Please forgive me if you’ve addressed this elsewhere.

Hi @ts11,

Looks like your persistence paid off with this issue. Nice going!

First off, I’m no SEO expert.

What I do know, though, is that link elements result in actual HTML anchor tags <a> in the DOM (rendered page), which Google can “see” and thus utilize to glean info about site structure. Bubble actions, OTOH, are just JS code and provide no information about document or site structure.

Also, from a UX perspective, browsers treat links a bit differently. Sometimes this is desirable and sometimes not. For example, most browsers show the full destination URL when the link is hovered. It’s precisely the browser-specific UI handling of links that some devs who are creating SPAs (especially those intended for conversion to native mobile app) prefer to use the navigation action instead - i.e. the clickable element won’t “behave” like a link. Sudsy Page provides both options, and the end result - i.e. intra-page navigation without page reload - is of course the same.

Hope it helps,

-Steve

1 Like

Hi Sudsy! Have a weird bug to report.

In my app (app.swapstack.co), I’m getting an error, but only in some situations related to viewing the page on mobile. It’s a little hard to show you without having an account, so I’ve recorded a loom for you.

Full Error text:

run.js:8 Action Go to URL via SudsyPage A - The plugin Sudsy Page / action Go to URL via a Sudsy Page threw the following error: TypeError: e.data.navTo is not a function
    at eval (PLUGIN_1551900316693x963780318009229300/Sudsy-Page-element_action--Sudsy-Page-Go-to-URL-via-.js:3:8)
    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2…/xfalse/x15/run.js:8:1207345 (please report this to the plugin author)
 
{original_error: TypeError: e.data.navTo is not a function
    at eval (PLUGIN_1551900316693x963780318009229300/Suds…, element_instance: null, action: t.exports, code: '1650669966195x702439546317152400'}
action: t.exports {json: e, A: {…}, _field_names: {…}, get_static_property_run_cache_1_param: ƒ}
code: "1650669966195x702439546317152400"
element_instance: null
original_error: TypeError: e.data.navTo is not a function at eval (PLUGIN_1551900316693x963780318009229300/Sudsy-Page-element_action--Sudsy-Page-Go-to-URL-via-.js:3:8) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207345 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1194301 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207302 at Object.i.run_without_catching_not_ready (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1322235) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207252 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307224 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307132 at g.evaluate (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307163) at new g (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1308494) at Object.r.Watcher (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1306365) at Object.r.run_once (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1305232) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207219 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610) at Object.r.run_once (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1306162) at Object.run (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1206984) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1146559 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610) at t.exports.run (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1146400) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97400 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at t.run_subsequent_actions (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97119) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:94596 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at t._run_workflow (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:94563) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:99831 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:99802 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at t.start_custom_workflow (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:98240) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97370 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at t.run_subsequent_actions (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97119) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97980 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441 at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104) at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393) at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610) at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97564 at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:170377
message: "e.data.navTo is not a function"
stack: "TypeError: e.data.navTo is not a function\n    at eval (PLUGIN_1551900316693x963780318009229300/Sudsy-Page-element_action--Sudsy-Page-Go-to-URL-via-.js:3:8)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207345\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1194301\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207302\n    at Object.i.run_without_catching_not_ready (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1322235)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207252\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307224\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307132\n    at g.evaluate (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1307163)\n    at new g (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1308494)\n    at Object.r.Watcher (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1306365)\n    at Object.r.run_once (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1305232)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1207219\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610)\n    at Object.r.run_once (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1306162)\n    at Object.run (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1206984)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1146559\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610)\n    at t.exports.run (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1146400)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97400\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at t.run_subsequent_actions (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97119)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:94596\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at t._run_workflow (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:94563)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:99831\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:99802\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at t.start_custom_workflow (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:98240)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97370\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at t.run_subsequent_actions (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97119)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97980\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320628\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320441\n    at h._attach_success (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320104)\n    at h.then (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320393)\n    at h.callback (https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:1320610)\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:97564\n    at https://dhtiece9044ep.cloudfront.net/package/run_js/6d23fc2574c8c609c4f4617155c40895cf887d6d2113e7968fc17663a8689852/xfalse/x15/run.js:8:170377"
[[Prototype]]: Error
[[Prototype]]: Object

Hi @jacob.b.singer,

Check to make sure the SudsyPage element is not inside a reusable or other container that gets hidden. The page root is generally the best place for it. Attempting to use a plugin action when the plugin (or the container in which it resides) is hidden is the only situation in which I’ve seen a similar error. Although the SudsyPage element is “headless”, it must be “visible” in order to use its actions.

-Steve