301 redirects in Optimizely 12

Vote:
 

What's the best way to do a 301 redirect in Optimizely 12?   I would normally do this in web.config but not sure about .Net Core.   I notice there are some plugins for Optimizely but they do not work in version 12.   Tried Geta and Verndale.... but they didn't work.   Verndale the site wouldn't start and got an error with Geta.

#299453
Apr 03, 2023 15:49
Vote:
 

If you would like to manage the redirects within the solution you can use the Microsoft.AspNetCore.Rewrite middleware see here for examples: URL Rewrites in CMS12 (.Net 6) | Optimizely Developer Community 

        var options = new RewriteOptions()
            .AddRedirect("/oldurl", "/newurl");

        app.UseRewriter(options);

I highly recommend using a management tool for a small fee SEOToolbox is quite good for this and now compatible with CMS12 : SEO Toolbox - Episerver add-on that automatically prevents broken links 

If you are looking for a free option then I have tried out Epicweb.Optimizely.RedirectManager which works also on CMS12 : Epicweb-Optimizely/Epicweb.Optimizely.RedirectManager: This .net 6 library contains a RedirectManager and admin user interface integration in an Optimizely CMS 12 and commerce 14 project. Tested with Alloy. (github.com) 

#299454
Edited, Apr 03, 2023 16:40
Vote:
 

Personally I prefer to create my redirects in the same format as standard IIS Rewrite XML files which can then be loaded via the following code

var streamreader = File.OpenText("IISUrlRewrite.xml");

using (streamreader)
{
    var options = new RewriteOptions()
        .AddIISUrlRewrite(streamreader);
    app.UseRewriter(options);
}

You can also use htaccess style as shown here https://learn.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-6.0 

One thing to be aware of in the startup.cs is placing them before

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(name: "Default", pattern: "{controller}/{action}/{id?}");
    endpoints.MapControllers();
    endpoints.MapRazorPages();
    endpoints.MapContent();
});

Means they will override any content URLs in Optimizely but placing them after will mean they only work when there's a 404.

While tools like the RedirectManager and the Geta NotFound handler are good tools in large builds for migrations I like them as low level as possible (my latest migration had 70k rules and works fine on the DXP).

To note as gathering and generating rules from clients can be difficult to create rules I have created an open source tool for ruleset generation I've used in my last 7-8 years of migrations https://github.com/ScottReed/iis-redirect-generator 

#299459
Edited, Apr 03, 2023 21:17
Vote:
 

Use Geta. You'll save yourself a bunch of time. Post your issue with Geta and we should be able to help. I've just recently installed it for a client now on .net 6 and there was some tweaking I needed to do. The current documentation needs some tidying up.

#299835
Apr 10, 2023 14:48
Vote:
 

If you go with Geta, make sure you're using the correct version -- some of their packages were renamed for CMS 12: https://nuget.optimizely.com/package/?id=Geta.NotFoundHandler.Optimizely

#300029
Apr 12, 2023 23:08
Vote:
 

I would highly recommend Geta Not Found Handler as well.  We use it on all of our CMS 12 builds and I've found the Geta team to be responsive to issues you raise on GitHub: https://github.com/Geta/geta-notfoundhandler

#300239
Apr 17, 2023 7:58
Vote:
 

I agree the Geta tool is useful, we use it in all projects but there I always like to think about the type of redirects.

When I'm migrating a site with large amounts of SEO redirects (tens of thousands) I wouldn't want to put this is Geta myself. I tend to couple it with the asp.net core rewrite middleware where these are permanent migration based redirects and keep Geta clean for marketing and basic redirects.

This was in pre .NET Core but I had performance problems previously with large amounts of redirects and large amounts of 404 requests hitting the site. I've not reviewed changes for .NET Core but in previous version the tool hooked in to the not found process in code and looked up information from the stored database tables which was very slow then there were LARGE amounts of 404 requests. This may be different now if the way it works has changed but having say 50k redirects in the database and in the tool isn't needed to me if they are migration redirects from an old platform that are unlikely to change so I prefer managing those in an XML file.

Either way it's always good to think about if the tools should be used or not based on what you're doing! 

#300245
Apr 17, 2023 8:57
Vote:
 

We do have some standard rules which are applied before the Geta tool as Scott implies.  However the highest number of redirect rules I have on a client within such a tool is around the 24K level so I won't have had the issues to the scale that say Scott has.  I am however now tempted to do some testing around that.

#300246
Apr 17, 2023 9:05
Scott Reed - Apr 17, 2023 9:14
I think the problem we had before was mainly as they were migration rules and we have LARGE amounts of traffic it was down to the high number of requests we were getting which overloaded the tool at the time. It might be also dependant on the amount of traffic as well, complex to really narrow it down. But I've found clients getting confused using the tool when it's got in to such large numbers but depends on the client type
Vote:
 

You can install Optimizely.RedirectManager library  and configure various options within the options parameter to customize how the RedirectManager behaves.
Here is how your can do that.. 
Open your Startup.cs file, and in the ConfigureServices method, add the following configuration:

services.AddRedirectManager(options =>
{
    // Configure options here
});

Once you have the RedirectManager configured, you can define redirects. 
You can add redirect rules to your codebase or import them from a file or database, depending on your requirements.

Here's an example:

// In your code, define a redirect rule
RedirectRule redirectRule = new RedirectRule
{
    FromUrl = "/oldurl",
    ToUrl = "/newurl",
    RedirectType = RedirectType.Permanent // Use Permanent (301) or Temporary (302) as needed
};

// Add the redirect rule to the RedirectManager
_redirectManager.AddRedirect(redirectRule);

You can define multiple redirect rules. 

Once done! Testing it

Now check requests to the old URLs and verify that the RedirectManager correctly redirects to the new URLs. Use browser developer tools to inspect network requests and redirects or use any online tool like redirect checker This can help you to get detail redirection chain and its status code. 

#308144
Sep 07, 2023 20:32
Vote:
 

I have installed Geta. Its working also but in some case it is redirecting with query parameter.

I have setup as below
Old url : /my-account/purchase-carduser##@@$(text)-+*0123text
New Url : /my-account/frequently-purchased
Wild Card : true (Checked)
Redirect Type : Permanent

Note : /my-account/purchase-carduser is 404 url.
When I open the old url
E.g http://{hostname}/my-account/purchase-carduser##@@$(text)-+*0123text
Then it redirecting to new url, but appending the parameters from old url.
http://{hostname}/my-account/frequently-purchased##@@$(text)-+*0123text.

Ideally it should redirected to new url as it is without appending any parameter.
Any Idea.

#317359
Feb 19, 2024 17:15
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.