Needs review
Project:
XML sitemap
Version:
7.x-2.x-dev
Component:
xmlsitemap.module
Priority:
Normal
Category:
Feature request
Assigned:
Unassigned
Issue tags:
Reporter:
Created:
3 Jul 2012 at 18:10 UTC
Updated:
7 Apr 2022 at 10:29 UTC
Jump to comment: Most recent, Most recent file
Comments
Comment #1
Anonymous (not verified) commentedIt isn't part of the standard sitemaps protocol. Dave Reid, what do you think about adding the extra namespace? This would have to be optional since the sitemap.xml chunks could get lengthy with this and there is a file size limit as well as a number of items per file limit. Frankly, if I were using i18n I would prefer separate files per language.
Comment #2
mgiffordI'm very interested in seeing how to best do this as well.
i18n is part of Core and has been since D6. I think it would be a best practice to see that xmlsitemaps supports multiple languages out of the box.
tagging.
Comment #3
doublejosh commentedAgreed. However i18n translation support is only new to D7.
Comment #4
Anonymous (not verified) commentedDave there is a question to you on #1.
Comment #4.0
Anonymous (not verified) commentedlink
Comment #5
kala4ekImplemented multilingual sitemap solution during Summer Drupal Code Sprint Novosibirsk 2014 #1.
This simple solution works well with all entities through enitiy_translation module or with nodes via i18n_node.
For start using you should run database update and select checkbox "Multilingual sitemap".
Best regards, kala4ek and Kovalevich.Artem.
Comment #6
mrP commentedSince this patch adds XHTML, than #2183765: Add XHTML namespace option is redundant. Feel free to close that issue if anyone agrees.
I would think this should be under advanced options -- $form['advanced']['xmlsitemap_xhtml'] or $form['advanced']['xmlsitemap_multilingual']. If so, than we need to add it in function xmlsitemap_variables()
Comment #7
kala4ekUpdated patch. Added multilingual option into $form['advanced'] and to xmlsitemap_variables().
Comment #8
nuezThis patch is good for multilingual content (nodes) but what about adding the rel="alternate" tag to custom pages (generated by views) and the frontpage?
We need some UI to add the tags manually...I will make another patch for that if that's ok.
Then there is this other doubt I have: on this page https://support.google.com/webmasters/answer/189077?hl=en, it is mentioned that you should use the rel="alternate" if only your template is translated but the actual content is not.
For example: on my website I have mostly multilingual contents but also a language neutral blog (which is in fact in english). You can access the blogposts through 3 different language prefixes. In that case you should add the rel="alternate" tag here too, because the content is duplicated but the interface is translated.
Comment #9
nuezThanks kala4ek,
Updated patch a little bit further.
Comment #10
nuezThere was an error in the patch the x-default being repeated. fixed in this updated patch
Comment #11
dr.osd commentedI have applied patch #10 for current sitemap module release, but have no effect. Cache cleared, sitemap rebuild, checkbox in settings is set.
Comment #12
mgiffordSo did you test it on simplytest.me or on an existing install?
I assume you installed the XML sitemap internationalization sub-module. I set it up here http://s2a21e30abe4eca4.s3.simplytest.me/
I didn't see it here:

I assume if I've got:
http://s2a21e30abe4eca4.s3.simplytest.me/ab/sitemap.xml
The
rel="alternate"should be in the header of that page, right?@nuez - any suggestions what we might have missed?
Comment #13
screon commentedAfter some trial and error the patch from #10 worked for me.
I use entity translation for my multilingual site, enabled the node_translation_sitemap module, enabled xmlsitemap_i18n, updated database and re-added my sitemap with the correct options checked.
So thank you guys!
The only question I have is, you are using
rel="alternative"while Google usesrel="alternate"in its examples. Does it matter?Comment #14
mgiffordIt would matter. Needs to be
rel="alternate" hreflang="x"Think this needs to be changed here as you suggested:
Comment #15
screon commentedHere's a patch that changes
rel="alternative"inrel="alternate"Comment #16
nuezI think it should indeed be rel="alternate", thanks for fixing that
Comment #17
screon commentednuez, I edited your patch from #10 to incorporate my changes. That way there aren't 2 different patches to apply.
Comment #18
mgiffordIs anyone using this patch in a live environment?
Can we verify it is working with Google in a multi-lingual environment before marking it RTBC?
Comment #19
joelpittetThese checkboxes look useful but they are not used within the module.
Comment #20
joelpittetSorry, I think I'm wrong, xmlsitemap_var() is weird to me as usually it would use variable_get()
Comment #22
joelpittetI am using this and I am not sure yet if it's successful... we shall see:)
Comment #23
joelpittetThis needs a re-roll since 2.1 was released.
Comment #24
joelpittetHere's a re-roll. Hope I didn't miss anything.
Comment #25
joelpittetI'm not sure if this is still needed? And if so, does it need a schema change as well to accompany it?
Comment #26
joelpittetThis change may be out of scope and it seems to be throwing errors when I try to validate:
Error 1845: Element '{http://www.w3.org/1999/xhtml}link': No matching global element declaration available, but demanded by the strict wildcard. in https://example.com/us/sitemap.xml on line 4 column 0
Using this service:
http://www.xmlcheck.com/checkurl.php
Comment #27
joelpittetnm #26 I read the errors wrong
Comment #28
joelpittetI made a mistake in the re-roll. Needs to be $data = array() I think...
Anyways this patch doesn't seem to be doing what it used to in #17
Comment #29
joelpittetOk this patch is a closer match, though I had to revert format_xml_elements() change to make it work as it did in #17.
Comment #30
johnpicozzi@joelpittet - I tried it with 7.x-2.1 and it failed on xmlsitemap.xmlsitemap.inc
Comment #31
joelpittetIt should only apply to 2.x-dev which is where the latest changes are.
Comment #32
johnpicozzi@joepittet - That makes sense.. The patch works, however got the following error when I tried a rebuild.
"An AJAX HTTP error occurred. HTTP Result Code: 500 Debugging information follows. Path: /batch?id=189&op=do StatusText: error ResponseText:"
Comment #33
joelpittetHuh... maybe there is a typo, though I didn't get that. Can you clear cache and rebuild the registry and try that again?
500 error is either a fatal or apache just gave up I find...
Comment #34
johnpicozziNo luck... Same error
Comment #35
joelpittetCheck your PHP logs to see what error message is behind that 500.
Comment #36
johnpicozziI did... Nothing in their. I'm working locally right now... might push it out to a dev server and try it there.
Comment #37
johnpicozziOk, Tried it on our dev server and got the following error when trying to rebuild the sitemap with drush
PHP Fatal error: Call to undefined function language_negotiation_get() in /sites/all/modules/contrib/xmlsitemap/xmlsitemap.generate.inc
Comment #38
joelpittetAh, well then I guess there needs to be a check if you don't have a multilingual site. The language.inc file isn't loaded unless there is more than one language enabled.
Comment #39
johnpicozzi@joelpittet - Is it possible to have the hreflang in the Sitemap with the sites default language?
Comment #40
joelpittet@johnpicozzi I don't believe there is a good reason for that, it will just add bulk to it but no real value. IMO
Comment #41
johnpicozzi@joelpittet Here is a use case... a multi-site with sites that are geared towards different countries but are still in english.
Where the hreflang would be something like: en-gb, en-au, es-mx, and es-es.
This post illustrates what I'm getting at: http://searchengineland.com/how-to-implement-the-hreflang-element-using-...
Comment #42
joelpittetThat sounds like a similar but different feature than this... Though I'm doing just that with the multilingal site and not multisite setup. en-CA and en-US in my case.
Comment #43
dermyrddin commented@johnpicozzi The 500 error is caused by low script execution time in php.ini, increasing this value helps me.
@joelpittet On big amount of nodes (33k * 2 languages) it's take a lot of time to write xml files after generating data, so the 500 error occurs. Maybe it's a good idea to do some optimisations on writing. Also automatic calculation of links amount per file results to generate files bigger than 10 MB, one need to decrease it to 25k or even 10k.
Also I think there is a bug with disabled languages in the patch. Translations for languages disabled in site configuration are also added to the resulting xml, althought they are not accessible.
Comment #44
joelpittet@Merlineus I've not had that problem yet but I have seen when doing some performance testing the slow hooks on this module for node_insert/update/delete.
I think it would be a good idea to open a performance issue for that. It may take a few things to get that right as there isn't going to be a panacea for performance knowing the structure that needs to be generated is verbose.
For the bug any chance you can post a patch trying to fix what you see?
Comment #45
Jurgen8en commentedHi,
The entitiy_translation was not working for me, changed
function xmlsitemap_generate_multilingual($link) {
Comment #46
knalstaaf commentedIt seems like this patch (#29) is breaking my actual sitemap. Whereas it looked pretty structured with the Multilingual sitemap option unchecked:
With the Multilingual sitemap option checked all the links and data are one big long string:
I'm also getting the following error when rebuilding the XML-sitemap after checking the Multilingual sitemap option:
It's not that the XML sitemap internationalization submodule has to be enabled?
Comment #47
sumeet.pareek commentedWhen working on the same problem, but not in the context of entity_translations, here is what I had to do eventually
- #2514288: Having rel="alternate" URLs in sitemap under custom circumstances
Comment #48
steven jones commentedI needed a slight tweak on the patch in #29 because if you don't have the pre-fetching of aliases enabled, then the $link['original'] never gets set. I've moved this outside of the if statement.
Comment #50
idebr commentedReroll of #48 plus a small change to fix a notice. The comments in #29 to #47 have not been addressed.
Comment #51
sokru commentedI've both entity_translation and i18n node translation enabled. With patch #50, I'll get only content translated by entity_translation right. I assume missing hreflang in sitemap is one of the reasons why Google's search console shows "Your site has no hreflang tags.".
https://www.drupal.org/project/hreflang module creates these correctly as a head links.
Comment #52
dave reidWhy did this parameter need to be renamed? Might it be better to key using something like '_attributes' instead?
Comment #53
dave reidCould we generate this information on hook_node_insert/update at all, instead of the generation process? I'm wondering if we should add some kind of serialized 'data' column in the links table where modules could insert data that could be rendered into the element.
Comment #54
dave reidAlso, I'm pretty sure this means we would *get rid* of xmlsitemap_i18n right? Why would we have a need to have multiple sitemaps per language if we have this patch?
Comment #55
dave reidPlus, if we generate this data on hook_node_insert()/update(), then we could have entity_translation implement hook_xmlsitemap_link_alter() to inject its data instead.
Comment #56
dave reidWhen used with core translation, this seems to be completely broken:
Any nodes that have a n.tnid value <> 0 to be excluded from xmlsitemap generation by default, because we want those nodes to be included "inside" the English node's record in the sitemap$translation = db_query("SELECT n.language FROM {node} n WHERE n.tnid = :nid", array(':nid' => $link['id']))->fetchCol();I don't also see anything that *excludes* all the translated nodes from being also included in the generationl>Comment #57
dave reidThe one thing not really answered here, is what we're supposed to do when the site has configured different *domains* per language, instead of just changing the path. Are we still supposed to only have one sitemap even though there are several different domains?
Also, if using entity_translation, why would we want to support this? Since the content is available at the same URL, why would we want to add all the alternate links?
Comment #58
dave reidAlso the patch seems to be missing that I actually added attribute support to writeElement() in #2387557: Support more advanced XML element output, and those changes to that method are not actually necessary.
Comment #59
dave reidFor example:
Accomplishes the same desired output without any changes to writeElement() at all.
Comment #60
pobster commentedI realise the approach is still very much "under review" but I needed to make some alterations to the patch at #50 due to it publishing unpublished nodes, and also using the base url of the site which created it rather than the given base url set in the modules admin page.
It's literally the same patch just with conditions for "status" on the queries, and passing the base url to the url() functions (in the same way the module does it).
Comment #61
pobster commentedNot my bug (!) but I spotted an issue in my logs with this patch, it passes a string rather than an object into
url()for the language parameter.Comment #62
mozh92 commentedI have problem with nid. I use i18n for translate nodes
/ru/about = nid 10572
but I see 10572 for ar and en language?
UPD
after patching I did next changes
function function xmlsitemap_generate_multilingual($link)
added
line 593 - 597
change on
and
line 604
change to
'href' => url('node/'.$tnid, array('language' => $x_default_lang, 'absolute' => TRUE, 'base_url' => variable_get('xmlsitemap_base_url', $GLOBALS['base_url']))),
and I got good links for translated nodes
Comment #63
giupenni commentedAny progress for this?
This is an essential features for a best SEO practice.
Comment #64
pobster commentedWe use the patch at #61 quite successfully, and have done for quite a few months now.
Comment #65
bwaindwain commentedThis patch checks that the translation is available before adding the x-default. In our case, it is possible that a translation of a page in the default language is unpublished or not available at all.
Thanks to all who have contributed so far.
Comment #66
bwaindwain commentedupdated to fix illegal offset
Comment #67
giupenni commented#66 works for me
Comment #68
toschl commentedI've been missing the alternate links for the frontpage. Which has its own type and is not a node. So I added those. Please can someone review?
Comment #69
artematem commentedUpdated to show node aliases for translations links instead of node/[nid] (the issue from #62).
Comment #70
artematem commentedComment #75
artematem commentedAdditional to patch #69. Fix for not entity links.
Comment #76
nchase commentedwhat about entity translations?
Comment #77
pobster commentedThey're clearly handled in the xmlsitemap_generate_multilingual() function.
Comment #78
bwaindwain commentedI've noticed that, with patch #66, if a page is added or a path is changed, future cron runs do not update sitemap.xml. Rebuilding links is the only way to update it. Is anyone else seeing this?
1. verify sitemap.xml is up-to-date
2. make sure "Minimum sitemap lifetime" is set to "no minimum" so that cron will do an update
2. create a new page
3. run cron manually /admin/config/system/cron
4. check sitemap.xml to see if new page is added
After studying this for a bit it seems that xmlsitemap_node module has a hook_node_insert() which calls xmlsitemap_link_save() which calls _xmlsitemap_check_changed_link() which returns FALSE instead of TRUE.
Comment #79
bwaindwain commentedRe #78, we're using some modules with node_access_grants and it turns out that the problem is solved with https://www.drupal.org/project/xmlsitemap/issues/690120.
Comment #80
bwaindwain commentedHere's patch #71/75 updated to work without translation module. Thanks all.
Comment #81
giupenni commented#80 works for me
Comment #82
kala4ek+1 for #80
Seems it almost ready to be committed.
Comment #83
WidgetsBurritos commented+1 RTBC
Comment #84
WidgetsBurritos commentedNote: I've started the effort to porting this to D8. To avoid confusion on this issue as it hasn't been officially merged in D7 yet, I've posted it as a separate issue: #2941164: using rel="alternate" rather than multiple sitemaps by language context (Drupal 8)
If the maintainers would prefer I post it in here, I can. I just figure it's best to keep this issue focused on D7 until it has been merged in.
Comment #85
giupenni commentedI'm trying #80 in a fresh installation and seem workrs as I expected.
Comment #86
pifagorI corrected the coding standards in the patch.
The logic of the patch does not change.
Comment #87
giupenni commentedI've applied #86 in two different sites and works as I expected.
Comment #88
les limGot a fatal error from #86 because of a missing
translation_path_get_translations()function. The patch presumes that if Entity Translation isn't enabled, then core Content Translation must be. In our case, we have locale enabled but no translations.New patch and interdiff attached.
Comment #89
james.williamsHere's a patch which avoids changing the primary key, i.e. resolving comment 25, hopefully.
This issue doesn't need to change the primary key, as I don't believe it needs to add rows to the xmlsitemap table anyway, it's just adding hreflang attributes at sitemap file generation time, rather than at the time of storing those records.
I think the primary key change was probably mixed up as part of #1481798: Add support for Entity Translation & Title modules, which does need to do it (it's in the latest patch there).
Comment #90
apugacescu commentedLatest patch does not apply on latest dev version of the module so I re-rolled it.
Comment #91
bwaindwain commentedhere's patch #90 for 7.x-2.4
Comment #95
vdsh commentedIn function xmlsitemap_generate_multilingual($link), there is a line generating errors:
This is because $translation is never defined for me. It's only defined if the option xmlsitemap_var('multilingual_only_nodes') is set. Can you let me know the purpose of this in_array check? I guess it's to have a x-default only for a multilingual node if we have selected this option. If that is the case, we should check again if the user has checked multilingual_only_nodes, else the error will always be there
Comment #96
papagrandeI can't speak to the issues in #95, but here is a reroll of the patch in #91 against 7.x-2.5. Let's see if it passes tests.
Comment #98
crasx commentedReroll of 91
Comment #99
jyraya commentedHello,
I have a case where we have a custom language negotiation method based on urls. So, limiting the multilingual attributes to the case where "locale-url" is limited is too strict.
Furthermore, the patch take the hypothesis that taxonomy terms are translated via Entity translation while there are other ways to translate them like one based on the same logic of "content translation" when "Taxonomy translation" module (i18n_taxonomy) is enabled: "Translate. Different terms will be allowed for each language and they can be translated."
I adapted the #98 patch in order to take into account of these elements:
_xmlsitemap_is_url_based_language_negotiation()function allowing to control is an URL based language negotiation method is enabled.I tried to make automatic but I realised that affects quite a lot the process performances. So I based the control on a list of the URL based language negotiation methods. It invoke a hook allowing to extend this list:
hook_xmlsitemap_url_based_negotiation_alter().I also propose a last process, if an element is not based on the "Entity translation" and Taxonomy/Content translation" mechanisms. This ones based on the mechanism of the "Menu translation" module.
I attach the patch and an inter diff based on #98 patch
Comment #100
james.williamsGood idea on
_xmlsitemap_is_url_based_language_negotiation()and the alter hook. I've made custom language negotiation methods before, so that could be very handy. And, yes, the taxonomy translation support ought to be extended, though that's not just specific to this issue around whether to use multiple sitemaps or not, but ought to be in any of the xmlsitemap project's general taxonomy handling. (Yes, the patches for this issue do explicitly touch term translations, but hopefully the point still stands.)I wonder if both of those are things better covered in a follow-up issue? I'm not sure they need covering in the core of this issue really, and this issue has already been around for long enough.
Don't get me wrong though - great contribution! This issue has just been around for too long already, and this is quite a lot of change to add here. I'd still certainly love to see the ideas/work incorporated into xmlsitemap one way or another though!
Comment #101
jyraya commentedI do not think being out of the issue scope.
The #97 treats the node using entity translation or content translation when "multilingual_only_nodes" is checked. If this option is unchecked, it treats suddenly only content translation.
I only ensure that the process is the same in all situations for the nodes ("multilingual_only_nodes" checked or not)
After, when the "multilingual_only_nodes" is unchecked, then other entities than nodes should be treated in this function too; that means the taxonomy terms too.
Like the nodes, the taxonomy terms can use different translation mechanism. If the function treats the 2 node translation mechanisms, then it is logic to apply the same logic on taxonomy terms, no?
Concerning the hook, thank you for the nice words about it and my contribution.
Here, also, I consider that I am not outside the issue scope. The patch #97 introduces the control on the enable language negotiation method but limits it to one.
The hook is there to give the possibility to add other method.
Since 4 years, my predecessors on my project did not stop to apply a patch to the current patch to extend the feature to our specific language negotiation method.
So, to avoid spending again years patching xmlsitemap for extending this control, it would be great to include this in the current issue. And As I said, this control is introduced by the issue's patches. So, it is logic for me to have a way to fix this in the current issue.
The only code part I hesitated to include in the patch was the one based on mechanism of the "Menu translation" module at the end of the function. (In fact, I am wrong saying it is based "Menu translation" because the function I used is in i18n. Sorry for this mistake.)
I thought that could be useless but on the other hand, it will be called on edge cases and then should have an limited impact from the point of view of the issue scope.
That's why I kept it but I understand that it is too much and we could remove it.
For the rest, I reorganised a little bit the code to exit the function as soon as it is possible, nothing more; In other words, the behaviour of the preceding patches is kept.
Comment #102
james.williamsI'm happy enough with your justification, it's all good change after all (as far as I can see from just reading your code & explanation). :-) But I'm in no place myself to actually test or review further, sorry (and that was the case before your patch too, I should add).
Comment #103
bwaindwain commentedThe line
$link['original'] = $link['loc'];was dropped in #97/#98. Here's an updated patch with the missing line added for 7.x-2.6.Sorry, I can't help with #95 or #99.
Comment #104
jyraya commentedHello bwaindwain,
The #99 patch addressed the #95 issue + another for sites that have another language negotiation mechanism based on urls.
Could you tell me what is wrong with it that obliged you to remove everything from it in the #103?
Regards.
Comment #105
bwaindwain commentedFYI: I ran patch #99 through our own automated testing and it passes fine. There's nothing wrong with #99. I just feel I don't have time to give or enough knowledge about the issues of #95 and #99 to contribute to the discussion.
Comment #106
pieterdcThanks all for your contributions.
The patch from comment #103 generates alternate links for my website's frontpage, whereas the patch from comment #99 doesn't.
#103 is still missing an hreflang="x-default" link for the frontpage though.
#99 has the same admin settings, and produces the same non-homepage links (in my case), but seems a bit more modularly (chunks split off to functions) coded.
Comment #107
james.williamsHere is a re-rolled version of #103. Sorry that misses out what was done in #99 again; that work may still be worthwhile but has added change that goes beyond what has already been reviewed & tested by anyone else here.
Comment #108
james.williamsI was getting the following notice with patch #107 (and patch #103) when sitemaps were generated:
This fixes that.
Comment #109
jyraya commentedHello,
I am sorry to say that the fix introduce a limitation on the language negotiation support that does not exist in the current stable version.
Therefore, the final fix must take into account of that in a way or another, or the module description should be modified in order to mention that it only supports the Drupal default language negotiation mechanism.
Otherwise, the fix introduces a kind of regression.
Comment #110
james.williamsThat's a fair argument. Note that the current stable version of the module doesn't add the alternate links at all though, so I don't think it's a regression, just a missing feature for anyone using a custom URL-based negotiation method?
Unless you can demonstrate something that currently works in XML sitemap 2.6 but does not with patch 108?
I don't mean to sideline what you've done at all; I (and no-one else so far) have not made time to evaluate it yet, no doubt because most of us do use the core URL-based negotiation.
Comment #111
james.williamsI've spent some time going through patch 99 and decided to incorporate it for my client anyway, so here's a patch that adds what it did, on top of patch 108.
The 'xmlsitemap_multilingual_only_nodes' setting was unnecessarily restricted to nodes, and wasn't fully respected in patch 99 anyway (when disabled, that patch still didn't output alternate links to languages that did not have translations of a node). So I've taken the opportunity to better implement it for entity translation and node/taxonomy translation alongside the patch 99 changes and renamed the setting 'xmlsitemap_multilingual_translated_only' to better reflect its intention, i.e.:
* when disabled, hreflang links are included for all enabled languages, regardless of whether the translation has been made for that language
* when enabled, hreflang links are only included for enabled languages that have had translations created
Links to the frontpage will be included for all enabled languages regardless of that setting.
I haven't included an interdiff between this patch and patch 99 to demonstrate the full extent of the tweaks to it, because it's not trivial to filter out all the other work between patches 98 and 108! @jyraya sorry about that - hopefully you can spot the differences between your original interdiff and this one? They're not perfectly identical because of the change to that setting explained above.
Comment #112
velrat commentedCan anyone tell me why this patch can't be installed?
Comment #113
james.williams@velrat what version of the module are you trying to apply the patch to? It still applies cleanly to the latest code in the 7.x-2.x (dev) branch. It doesn't apply to a specific release, because patches are made to be applied on top of the latest work in development.
You could try using the latest dev branch with the patch, or manually create your own version of the patch that does apply, taking the parts in the generated '.rej' files that were left behind and carefully applying them yourself. Or find another way...
Comment #114
velrat commentedThank you for your answer.
Indeed, after installing the latest version of the module, I was able to apply the patch without errors.
But, unfortunately, it does not work for me. No rel = alternate links added. Instead, sitemap formatting is completely gone. After applying the patch, I see the following
Comment #115
james.williams@velrat Use your browser's option to view the page source to see the actual XML.
Comment #116
velrat commentedPlease tell me which option. I use Google Chrome. Before applying the patch, the appearance is as follows:
Comment #117
james.williamsRight-click the page, click 'View Page Source'.
Comment #118
velrat commentedWell.
# 111 is installed but does not work correctly. Only rel = alternate hreflang = en is included in the map. Although English is generally excluded for the site and should not be included in the map. As for the two languages used on the site, they are not included in the map.
# 108 includes in the map two language versions of the site that are used. But it also adds English, which is turned off. Is it possible to somehow get rid of the disabled language?
x-default does not work in # 108 and # 111
Comment #119
james.williams@velrat Please can you provide a screenshot of what settings you have for the various bits of multilingual configuration that this patch uses? (In the 'Advanced settings' section on /admin/config/search/xmlsitemap/settings ) Some of the things you've mentioned are quite possibly just because your settings are configured that way. (And the defaults don't necessarily match your expectation - which might be fair, but there's probably also a need to remain backwards-compatible.)
Comment #120
velrat commented-