Локолизиция в .NET'e и смена языков для Гугла.

12
alexburzak
На сайте с 28.11.2006
Offline
61
1188

Сделал мултиязычный сайт, к примеру, русский и английский с помощью ресурсов (resx) переключаю контент сайта на одну и тоже страницу в зависимости от языка пользователя.

Другими словами страница www.mysite.com/default.aspx может отобразится по-русски или по-английски в зависимости от языка пользователя (конечно также есть принудительное переключение языков).

Внимание вопрос, как Гугл увидит мой сайт, на каком языке?

Я предполагаю, что в зависимости какой робот зайдет таким языком и отобразится. Правильно ли я понимаю работу Гугла?

Понятно, что можно разнести сайт по разным доменам или добавить параметр в конце, что бы помочь Гуглу распознать языки. Вопрос в том, что если ему(Гуглу) не помогать что Гугл увидит?

Интересует мнения людей, которые, что-то подобное делали.

URL: Продвижение сайтов, построение сайтов, сопровождение сайтов (http://www.upmaster.co.il/default.aspx?lan=ru) Прежде, чем задать вопрос я всегда пользуюсь поиском и MSDN!
R
На сайте с 16.10.2009
Offline
14
#1

Идиотское решение, URL должен однозначно определять язык контента.

Энивэй, в гугл вебмастер тулз есть специальная приблуда, позволяющая увидеть сайт глазами гуглбота. Тебе туда.

alexburzak
На сайте с 28.11.2006
Offline
61
#2
remorhaz:
Идиотское решение, URL должен однозначно определять язык контента.

Ну мне тоже никогда не нравилась продукция мелкософта, но в данном случии не вижу ничего плохого в этом. Что плохого, если сайт определяет язык пользователя и подстовляет нужный ресурс, не говоря о том что перевод каждого следуещего добавчного языка веьма прост(достаточно перевести нужный файл ресурсов).

remorhaz:
в гугл вебмастер тулз есть специальная приблуда, позволяющая увидеть сайт глазами гуглбота. Тебе туда.

Сайт еще не открылся, но клиент (тот который всегда прав) уже хочет знать, что произойдет с его сайтом. Так что их приблуда пока мне бесполезна. В любом случаии их приблуда покажет только одну локальную версию сайта, а мне больше интересно знать весь комплекс продвижения в таком случаии. Может кто-нибудь сталкивался с чем то подобным?

M
На сайте с 08.11.2008
Offline
122
#3
remorhaz:
Идиотское решение, URL должен однозначно определять язык контента.
alexburzak:
Что плохого, если сайт определяет язык пользователя и подстовляет нужный ресурс

Про идиотское решение: заходим на гугл дот ком с английской локализации всего, браузер, ос, попадаем на гугл дот ком дот юа. И дальше гугл упорно посылает на укр версию, хотя явно выбирается и версия пс и версия сайта на английском. Данный момент очень раздражает, ведь не логиниться каждый раз, чтобы искать в удобной форме.

mcafeeuser добавил 25.10.2009 в 10:36

alexburzak, выбор языка по айпи, хотя для робота пс это возможно не верное решение.

Новогодний хостинг. Тут! (/ru/forum/comment/13379437) Дед Мороз одобряет!
N
На сайте с 23.01.2008
Offline
74
#4

ничего хорошего не произойдет. язык нужно использовать в урл 100%.

alexburzak
На сайте с 28.11.2006
Offline
61
#5
mcafeeuser:
Данный момент очень раздражает,

Ага согласен, в моем случаии я сохраняю в кукис язык и пользователь работает с той версией сайта, с которой он хочет. Хотя бы в этом мы лучше Гугля. ☝

mcafeeuser:
выбор языка по айпи, хотя для робота пс это возможно не верное решение.

В моем случаи выбор языка идет по платформе пользователя (стандартные средства дот нета), что на мой взгляд удобней.

Спасибо за ответ, но если можно обосновать про неверное решение. :)

alexburzak добавил 25.10.2009 в 10:50

n00ne:
ничего хорошего не произойдет. язык нужно использовать в урл 100%.

Клиент не хочет (который всегда прав!), можно обосновать почему это так нужно? Разве и Гугла один поисковый бот? Есть ли у него локальные версии?

SC
На сайте с 02.05.2009
Offline
52
#6

Майкрософт тут не при чём, стандартное решение на то и стандартное. Нужно ручки приложить:

Делаем URLы вида www.site.com/en/ и www.site.com/ru/

1. Создаём HttpModule в папке App_Code вида GlobalModule.cs

public class GlobalModule : IHttpModule

{

public GlobalModule()

{

}

public void Dispose()

{

}

public void Init(HttpApplication context)

{

context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);

context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);

}

void context_PreRequestHandlerExecute(object sender, EventArgs e)

{

HttpContext context = (sender as HttpApplication).Context;

if (context.Items["OriginalUrl"] != null)

context.RewritePath(context.Items["OriginalUrl"].ToString());

}

void context_AuthorizeRequest(object sender, EventArgs e)

{

HttpApplication application = sender as HttpApplication;

string url = application.Request.RawUrl;

if (!url.Contains(".aspx"))

return;

string cultureStr = string.Empty;

if (url.StartsWith("/ru/"))

cultureStr = "ru-RU";

else if (url.StartsWith("/en/"))

cultureStr = "en-US";

if (cultureStr != string.Empty)

{

CultureInfo culture = new CultureInfo(cultureStr);

Thread.CurrentThread.CurrentCulture = culture;

Thread.CurrentThread.CurrentUICulture = culture;

string prefix = cultureStr == "ru-RU" ? "ru/" : "en/";

application.Context.Items["OriginalUrl"] = url;

url = url.Remove(1, 3);

application.Context.RewritePath(url);

}

else

{

string prefix = string.Empty;

foreach (string lang in application.Context.Request.UserLanguages)

{

if (lang.StartsWith("en")) { prefix = "en/"; break; }

if (lang.StartsWith("ru")) { prefix = "ru/"; break; }

}

if (prefix == string.Empty)

prefix = "en/";

HttpResponse response = application.Response;

response.Clear();

response.AddHeader("Location", url.Insert(1, prefix));

response.StatusCode = 302;

response.Status = "302 Found";

response.End();

}

}

}

2. Подключаем модуль в web.config

----- IIS 6

<httpModules><add name="GlobalModule" type="GlobalModule" /></httpModules>

----- IIS 7

<system.webServer><modules><add name="GlobalModule" type="GlobalModule" /></modules></system.webServer>

Если всё правильно настроили, должно работать

При вызове www.site.com будет происходить редирект 302 Found на страницу в соответствии с настройками браузера.

При прямом вызове www.site.com/en/ будет сразу английский язык. Гугл выйдет допустим на en и через страницу смены языков попадёт на русский.

N
На сайте с 23.01.2008
Offline
74
#7

alexburzak, дело не в количестве поисковых ботов, а в том, что для гугла это одна страница. На каком языке он ее проиндексирует, на таком и будет. Потом может проиндексировать на другом языке...

M
На сайте с 08.11.2008
Offline
122
#8

shareyourtrade.com, для такого решения пользователь должен знать о вашей реализации переключения локалей. Обычно вся софтина ставится в соответствие выбранной локали ОС"ы, что логично. Логично такое и для сайтов делать.

alexburzak:
Спасибо за ответ, но если можно обосновать про неверное решение.

К примеру приехал индус в гости другану со своим ноутом, а гугл начинает прививать любовь к иностранному языку используя айпи, которые к тому же могут не правильно детектиться.

У меня всё настроено под одну локаль с определёнными доп настройками, и выше упомянутое поведение гугля было бы логичным в том, случае если бы сам гугль существовал только в китайской и укр версиях.

SC
На сайте с 02.05.2009
Offline
52
#9

mcafeeuser, я кажется чётко обозначил, что

При вызове www.site.com будет происходить редирект 302 Found на страницу в соответствии с настройками браузера.
M
На сайте с 08.11.2008
Offline
122
#10
shareyourtrade.com:
mcafeeuser, я кажется чётко обозначил, что

А робот гугла имеет настройки локали?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий