WordPress.org

Make WordPress Core

Opened 10 years ago

Closed 21 months ago

#12456 closed defect (bug) (wontfix)

Canonical URL redirect issue with post_id/postname permalink structure

Reported by: Frank.Prendergast Owned by: dd32
Milestone: Priority: normal
Severity: normal Version: 2.9.2
Component: Canonical Keywords: tested 3.3-early needs-patch
Focuses: Cc:
PR Number:

Description

The issue:

Using /%post_id%/%postname%/ as permalink structure,
Most canonical redirects work fine, except:

domain.com/post_id/ brings you to the post but does not redirect to the canonical domain.com/post_id/postname/

Additional info:

The above permalink structure conforms to best practice as described in the codex:
http://codex.wordpress.org/Using_Permalinks#Structure_Tags

Therefore I figured this was a bug, given the attention given to redirecting to the canonical url "So to avoid confusing search engines and to consolidate your rankings for your content, there should only be one URL for a resource."
http://markjaquith.wordpress.com/2007/09/25/wordpress-23-canonical-urls/

Attachments (3)

12456.diff (933 bytes) - added by dd32 10 years ago.
12456.2.diff (1.2 KB) - added by wonderboymusic 7 years ago.
12456.3.diff (1.3 KB) - added by atimmer 6 years ago.

Download all attachments as: .zip

Change History (30)

#1 @scribu
10 years ago

  • Component changed from Permalinks to Canonical
  • Milestone changed from Unassigned to 3.0
  • Owner changed from ryan to markjaquith

#2 follow-ups: @dd32
10 years ago

  • Keywords has-patch needs-testing added; permalinks canonical redirect removed
  • Milestone changed from 3.0 to 3.1
  • Type changed from defect (bug) to enhancement

It doesnt appear that Redirecting Rewritten URL's has ever been handled by the Canonical system for WordPress. Most of the code is for redirecting ?query=var to /query/something/var/.

I'm going to attach a little-tested patch, please test it out, and try to break it if possible :)

IMO, This may be fitting in as an enhancement since its not currently a handled case and is not a regression, which would mean relegating it to 3.1 as we're in 3.0 feature freeze.

@dd32
10 years ago

#3 in reply to: ↑ 2 ; follow-up: @Frank.Prendergast
10 years ago

Thank you so much for coming back to me on this. I've implemented the patch on a test site using the nightly build and so far so good.

I wasn't able to try it on my main site because I wouldn't know how to implement the patch as the canonical.php is different, so proper & full tire kicking might need to wait until 3.0 is ready for implementing on my main site.

Many thanks again. This could provide people with a nice little url shortening tool without risking losing any "Google juice" if people link to the propogated shorter url.

#4 in reply to: ↑ 3 @Frank.Prendergast
10 years ago

(My main site being WP 2.9.2)

#5 in reply to: ↑ 2 @Frank.Prendergast
10 years ago

Just to check back and say that I've had this patch on a test install I use for development and haven't run into any issues with it.

Thank you again, and let me know if I should do anything else (first time submitting anything to trac).

#6 @dd32
10 years ago

  • Keywords tested early added; needs-testing removed
  • Owner changed from markjaquith to dd32
  • Status changed from new to accepted

Thanks for getting back to me that it works as expected.

I'm not going to add this to 3.0 due to how close we are to release, so it'll be in 3.1

#7 @Otto42
9 years ago

Noticed this one yesterday. This is definitely a problem that needs to be resolved. Recommend pushing it into the next release.

#8 @nacin
9 years ago

  • Milestone changed from Awaiting Triage to 3.1

#9 @hlanggo
9 years ago

  • Cc hlanggo added

/postname/post_id also has the same problem. /postname shows the correct page but doesn't redirect to the canonical /postname/post_id

With /postname/post_id (no ending slash) permalink structure:

Canonical: http://metroparkhotelcebu.com/mph/138 (/postname/post_id)
Redirect OK: http://metroparkhotelcebu.com/138/mph (/post_id/postname)
No redirect: http://metroparkhotelcebu.com/mph (/postname)
404: http://metroparkhotelcebu.com/138 (/post_id)

Yes, I am aware that using postname first causes performance issues but back when I decided on it, http://codex.wordpress.org/Using_Permalinks said it was okay to start with postname. Thankfully, my sites are small so the performance problems aren't debilitating.

#10 @dd32
9 years ago

hlanggo: Did you try the attached patch at all?

#11 @hlanggo
9 years ago

No, I did not try the patch. Just wanted to report that /postname/post_id has the same redirect issue as post_id/postname

It's the "starting with postname" performance issue which concerns me the most. I just came across your ticket while searching about it.

#12 @jane
9 years ago

  • Milestone changed from 3.1 to Future Release

Punting this enhancement ticket b/c we are going into beta. Can reconsider for 3.2 when there is a well-tested patch.

#13 @dd32
9 years ago

  • Keywords 3.2-early added; early removed

planning on covering this, and a few other cases such as #14773 in 3.2

#14 @dd32
8 years ago

  • Keywords 3.3-early added; 3.2-early removed

Missed the boat for 3.2 again.

This covers #17653 as well.

#15 @dd32
8 years ago

Patch doesnt cover /page/xx/ redirections and a few others probably.

#16 @wonderboymusic
7 years ago

  • Milestone changed from Future Release to 3.6

I rejiggered dd32's patch to make it work against trunk 3 years later (class of 3.3-early) - and also fixes #17653, which is class of 3.2-early. Passes all Unit Tests.

#17 @ryan
7 years ago

  • Milestone changed from 3.6 to Future Release

@atimmer
6 years ago

#18 @atimmer
6 years ago

12456.3.diff refreshes dd32's patch against current trunk and the new repository structure.

Also adds set_url_scheme that wonderboymusic added here.

#19 @seth17
6 years ago

I'm also experiencing this issue. The /%post_id%/%postname%/ permalink structure is my preferred method, as changing the slug won't cause the post to 404, since the post id remains the same. Any chance of this getting fixed in 3.9.2?

#20 @SergeyBiryukov
5 years ago

#28781 was marked as a duplicate.

#21 @dd32
5 years ago

#29858 was marked as a duplicate.

#22 @Niresh12495
4 years ago

When will this issue be fixed?

#23 @calvin_ngan
3 years ago

  • Resolution set to worksforme
  • Status changed from accepted to closed

I've found the answer only for redirecting /%post_id%/ to /%post_id%/%postname%/
Add this to your .htaccess, change the domain name and the http/https

RedirectMatch 301 ^/(\d+)/$ https://www.geckoandfly.com/?p=$1
Last edited 3 years ago by calvin_ngan (previous) (diff)

#24 follow-up: @Niresh12495
3 years ago

  • Keywords needs-patch added; has-patch removed
  • Resolution worksforme deleted
  • Status changed from closed to reopened
  • Type changed from enhancement to defect (bug)

@calvin_ngan this solution relatively works for all domains simply add this to your .htaccess, i have been using this on my blog http://www.niresh.guru since a long time but Wordpress must fix this with PHP so im reopening this ticket

RedirectMatch 301 ^/(\d+)/$ /?p=$1

#25 in reply to: ↑ 24 ; follow-up: @calvin_ngan
3 years ago

Replying to Niresh12495:

@calvin_ngan this solution relatively works for all domains simply add this to your .htaccess, i have been using this on my blog http://www.niresh.guru since a long time but Wordpress must fix this with PHP so im reopening this ticket

RedirectMatch 301 ^/(\d+)/$ /?p=$1
  1. Nobody gave him a temporary solution, thus, I posted one.
  2. After 7 years, it is still not taken care of, I doubt they see this as bug. Probably will never be resolve.

#26 in reply to: ↑ 25 @anbumz
21 months ago

Replying to calvin_ngan:

Replying to Niresh12495:

@calvin_ngan this solution relatively works for all domains simply add this to your .htaccess, i have been using this on my blog http://www.niresh.guru since a long time but Wordpress must fix this with PHP so im reopening this ticket

RedirectMatch 301 ^/(\d+)/$ /?p=$1
  1. Nobody gave him a temporary solution, thus, I posted one.
  2. After 7 years, it is still not taken care of, I doubt they see this as bug. Probably will never be resolve.

Very unfortunate that this is not an in-built Wordpress feature as it causes problems with search engines and analytics. This .htaccess solution works like a charm, however.

How would you have to change the expression to capture URLs like this as well: /lc/post_id/ whereas lc is a two-character language code like "en" for english or "de" for German and so on. This is relevant for multilingual plugins such as WPML. Redirection destination then would be /lc/post_id/post_name/

#27 @Otto42
21 months ago

  • Milestone Future Release deleted
  • Resolution set to wontfix
  • Status changed from reopened to closed

This likely isn't going to be fixed, because the truth is that nearly nobody uses this permalink format. The format of /%post_id%/%postname%/ is less used than just the format of /%postname%/.

Not all permalink formats need to be totally optimized, I think. We can provide examples for best choices without providing optimized support in core for every possible choice.

Note: See TracTickets for help on using tickets.